SQL Server创建表

SQL Server是Microsoft开发的一个关系型数据库管理系统,无论是开发小型还是大型应用它都有很好的表现。本文从多个方面介绍SQL Server创建表的方法和技巧。

一、表的基础结构

在SQL Server中,创建表需要定义表的基础结构。基础结构包括表的名称、列名称、数据类型和列约束等。


CREATE TABLE [dbo].[Employee](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [First Name] [varchar](50) NOT NULL,
    [Last Name] [varchar](50) NULL,
    [Email] [varchar](50) NULL,
 CONSTRAINT [PK_Employee] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

上述代码示例为创建名为Employee的表,并定义了四列:id(自增型整数)、First Name(非空的字符串型)、Last Name(字符串型,可以为空)和Email(字符串型,可以为空)。其中,id列被指定为主键,且使用IDENTITY属性进行自增。在创建表时,需要使用CREATE TABLE语句,同时定义表的名称和列的属性。

二、主键和外键

主键和外键是SQL Server中非常重要的概念,它们用于建立表与表之间的关系。主键用于唯一标识表中的每一行数据,而外键则用于建立表之间的联系。

可以使用以下代码来创建包含主键和外键的表:


CREATE TABLE [dbo].[Employee](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [First Name] [varchar](50) NOT NULL,
    [Last Name] [varchar](50) NULL,
    [Email] [varchar](50) NULL,
 CONSTRAINT [PK_Employee] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[Orders](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [EmployeeId] [int] NOT NULL,
    [OrderDate] [date] NOT NULL,
 CONSTRAINT [PK_Orders] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Orders]  WITH CHECK ADD  CONSTRAINT [FK_Orders_Employee] FOREIGN KEY([EmployeeId])
REFERENCES [dbo].[Employee] ([id])
GO
ALTER TABLE [dbo].[Orders] CHECK CONSTRAINT [FK_Orders_Employee]
GO

上述代码示例创建了两个表:Employee和Orders。Employee表中的id列被指定为主键,而Orders表中的EmployeeId列则被指定为外键,用于与Employee表建立联系。

三、列属性的约束

在SQL Server中,可以使用列的属性约束来限制列的取值范围、验证输入数据等。下面介绍几种常用的列属性约束:

1. 非空约束

非空约束用于限制该列的值不能为空。当使用非空约束时,插入一条没有该列的值的数据时,SQL Server将会返回一个错误。


CREATE TABLE [dbo].[Employee](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [First Name] [varchar](50) NOT NULL,
    [Last Name] [varchar](50) NULL,
    [Email] [varchar](50) NULL,
 CONSTRAINT [PK_Employee] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

2. 唯一约束

唯一约束用于限制该列的值不能重复。当使用唯一约束时,插入一条重复的数据时,SQL Server将会返回一个错误。


CREATE TABLE [dbo].[Employee](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [First Name] [varchar](50) NOT NULL,
    [Last Name] [varchar](50) NULL,
    [Email] [varchar](50) NULL,
 CONSTRAINT [PK_Employee] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY],
 CONSTRAINT [UQ_Email] UNIQUE NONCLUSTERED 
(
    [Email] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

3. 默认值约束

默认值约束用于在插入数据时设置该列的默认值。当插入数据时,如果该列没有输入值,将会使用默认值。


CREATE TABLE [dbo].[Employee](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [First Name] [varchar](50) NOT NULL,
    [Last Name] [varchar](50) NULL,
    [Email] [varchar](50) NULL DEFAULT 'test@test.com',
 CONSTRAINT [PK_Employee] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

4. 检查约束

检查约束用于限制该列的值必须符合指定条件。当插入数据时,如果该列输入的值不符合指定条件,SQL Server将会返回一个错误。


CREATE TABLE [dbo].[Employee](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [First Name] [varchar](50) NOT NULL,
    [Last Name] [varchar](50) NULL,
    [Email] [varchar](50) NULL,
    [Salary] [money] NOT NULL CHECK (([Salary]>(0))),
 CONSTRAINT [PK_Employee] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

四、表的索引

索引是一个非常强大的工具,它可以加速对表的查询和更新操作。在SQL Server中,可以使用CREATE INDEX语句创建索引。

下面代码示例展示了如何在Employee表的LastName列上创建索引:


CREATE NONCLUSTERED INDEX [IX_Employee_LastName] ON [dbo].[Employee]
(
    [Last Name] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO

五、表的分区

表的分区是一种高级技术,它可以将一个表中的数据分成多个分区进行管理。在SQL Server中,可以使用CREATE PARTITION FUNCTION和CREATE PARTITION SCHEME语句来实现表的分区。

下面代码示例展示了如何使用CREATE PARTITION FUNCTION和CREATE PARTITION SCHEME语句来创建一个Employee表的分区:


CREATE PARTITION FUNCTION EmployeePF1 (int)
AS RANGE LEFT FOR VALUES (100, 200, 300)

CREATE PARTITION SCHEME EmployeePS1
AS PARTITION EmployeePF1
TO ([PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY])

CREATE TABLE [dbo].[Employee](
    [id] [int] NOT NULL,
    [First Name] [varchar](50) NOT NULL,
    [Last Name] [varchar](50) NULL,
    [Email] [varchar](50) NULL,
 CONSTRAINT [PK_Employee] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON EmployeePS1(id)

六、总结

本文介绍了SQL Server中创建表的基本结构和常用技巧,包括创建主键和外键、列属性约束、表的索引和分区等。在实际开发中,需要根据具体的需求选择不同的技术,以提高数据库系统的处理效率和数据管理能力。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/246183.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-12 13:13
下一篇 2024-12-12 13:13

相关推荐

  • Hibernate日志打印sql参数

    本文将从多个方面介绍如何在Hibernate中打印SQL参数。Hibernate作为一种ORM框架,可以通过打印SQL参数方便开发者调试和优化Hibernate应用。 一、通过配置…

    编程 2025-04-29
  • 使用SQL实现select 聚合查询结果前加序号

    select语句是数据库中最基础的命令之一,用于从一个或多个表中检索数据。常见的聚合函数有:count、sum、avg等。有时候我们需要在查询结果的前面加上序号,可以使用以下两种方…

    编程 2025-04-29
  • 理解Mybatis中的SQL Limit用法

    Mybatis是一种非常流行的ORM框架,提供了SQL映射配置文件,可以使用类似于传统SQL语言的方式编写SQL语句。其中,SQL的Limit语法是一个非常重要的知识点,能够实现分…

    编程 2025-04-29
  • SQL预研

    SQL预研是指在进行SQL相关操作前,通过数据分析和理解,确定操作的方法和步骤,从而避免不必要的错误和问题。以下从多个角度进行详细阐述。 一、数据分析 数据分析是SQL预研的第一步…

    编程 2025-04-28
  • RabbitMQ Server 3.8.0使用指南

    RabbitMQ Server 3.8.0是一个开源的消息队列软件,官方网站为https://www.rabbitmq.com,本文将为你讲解如何使用RabbitMQ Server…

    编程 2025-04-27
  • SQL Server Not In概述

    在今天的软件开发领域中,数据库查询不可或缺。而SQL Server的”Not In”操作符就是这个领域中非常常用的操作符之一。虽然”Not In…

    编程 2025-04-25
  • Windows Server 2012激活码

    一、激活码是什么? 激活码是用于激活软件产品的一种序列号,可以通过购买或升级软件获得。Windows Server 2012的激活码可以确保软件的合法使用,避免非法行为。 激活码的…

    编程 2025-04-25
  • 使用VSCode Live Server进行Web开发

    Web开发已经成为现代开发的一个重要部分,而VSCode也成为了许多开发者的首选开发工具。VSCode Live Server是VSCode中一个非常有用的插件,可以帮助Web开发…

    编程 2025-04-25
  • GORM SQL注入详解

    GORM是一个非常优秀的Go语言ORM框架,它的目标是简化数据库操作,提高开发效率,但是在使用的过程中,也难免会遇到SQL注入的问题。本文将从多个方面来详细解析GORM SQL注入…

    编程 2025-04-25
  • SQL ROW_NUMBER 函数用法

    一、实现排序 SQL ROW_NUMBER 函数是 SQL Server 数据库实现分组排序功能的一种方法,允许您根据一个或多个列进行排序。这是 SQL ROW_NUMBER 的一…

    编程 2025-04-25

发表回复

登录后才能评论