SQL Server里头怎么写创建表的语句,步骤和注意点简单聊聊
- 问答
- 2026-01-09 14:13:28
- 2
在SQL Server里创建一个新表,就像是给数据库规划一个储物柜,你得先想好这个柜子叫什么名字,里面要分几个格子,每个格子放什么类型的东西,有什么规矩,这个过程就是写CREATE TABLE语句,下面我直接说说怎么一步步把它写出来,以及一些容易踩坑的地方。
第一步:想好表的结构,也就是表名和列
最开头肯定是CREATE TABLE这两个词,这是固定写法,告诉SQL Server你要干的是建表这件事,紧接着就是给你的表起个名字,这个名字最好能一眼看出来是干什么的,比如放员工信息的就叫Employees,放订单的就叫Orders,起名字有个小规矩,为了避免和SQL Server自己的关键字冲突,有时候需要用方括号[]把表名括起来,比如你非要叫Table,那就得写成[Table],不过一般只要名字取得合理,不加方括号也行。
表名后面跟着一对圆括号,所有关于柜子格子的定义都写在这对括号里面,每个格子,也就是每一列,的定义包含几个部分:列名、数据类型,还有一些可选的约束。

第二步:定义每一列的数据类型
这是非常关键的一步,数据类型决定了这个格子里能放什么样的东西,你要是定义错了,就像想把一个大箱子塞进一个小抽屉,肯定会出问题,SQL Server里常用的数据类型有这么几种,你得根据实际情况选:
- 放整数的:比如
int,这是最常用的,能放大概正负二十亿之间的整数,如果数字比较小,比如人的年龄,可以用tinyint(0到255)或者smallint(-3万多到3万多),非常大的数就用bigint。 - 放小数的:比如
decimal或者numeric,用的时候你得指定精度和小数位数,像decimal(10, 2)意思是最多10位数,其中小数点后面占2位,这很适合存金额。 - 放文本的:最常用的是
varchar(n),这里的n表示最多能存多少个字符,比如varchar(50)就能存最多50个字符(字母、汉字都算一个字符),它的好处是实际占用的空间根据你存的内容长度来变,比较节省,如果你确定某个字段的长度固定,比如身份证号总是18位,可以用char(18),对于很长的文本,比如文章内容,可以用varchar(max)。 - 放日期和时间的:主要是
datetime或者date。datetime包含日期和时间,date只包含日期部分。 - 放真假值的:用
bit,它只能存0或1(代表假或真)。
(参考来源:微软官方文档“SQL Server 数据类型”)

定义列的时候,一句写一行会比较清楚,每一句后面用逗号分隔,最后一列后面不加逗号。
第三步:设置主键和约束
光有格子还不够,我们得给柜子立点规矩,保证里面放的东西不乱套,这就是约束。

- 主键(PRIMARY KEY):这是最重要的约束,你可以把它理解为每个柜子格子的唯一编号,绝对不允许重复,也不能是空的,通过这个编号,我们能快速准确地找到某一样东西,通常我们会用一个ID列来当主键,比如
EmployeeID,在定义这个列的时候,可以在数据类型后面直接加上PRIMARY KEY,如果主键是由多个列一起组成的(这种情况少一些),可以在所有列定义完后,单独写一行PRIMARY KEY (列名1, 列名2)。 - 是否允许为空(NULL/NOT NULL):这个规定某个格子能不能不放东西,比如
EmployeeName(员工姓名)这种重要信息,就应该设为NOT NULL,表示必须填,不能空着,而像Nickname(昵称)这种非必填项,就可以设为NULL,允许为空,如果你不写,SQL Server默认是允许为NULL的,所以重要的字段一定要记得加上NOT NULL。 - 唯一约束(UNIQUE):保证某一列(或几列)的值不能重复,但允许为空,比如员工的邮箱地址,可能不是必填的(允许NULL),但填了就不能和别人重复。
- 默认值(DEFAULT):可以给某个列设置一个默认值,如果新增数据时没给这个列赋值,它就自动用这个默认值,比如可以给
CreateTime(创建时间)列设置一个默认值为GETDATE(),这样每次新增记录,系统都会自动把当前时间填进去。 - 外键(FOREIGN KEY):这个用来建立表和表之间的关系,比如你有一个
Orders(订单)表,里面要记录是哪个客户下的单,就可以有一个CustomerID列,你可以通过外键约束,规定这个CustomerID的值必须存在于Customers(客户)表的主键CustomerID中,这样就保证了不会出现一个不存在的客户的订单,外键约束通常是在所有列定义完之后再写,格式是FOREIGN KEY (当前表的列名) REFERENCES 另一个表名(那个表的主键列名)。
(参考来源:微软官方文档“CREATE TABLE (Transact-SQL)”中的约束部分)
一个简单的例子
假设我们要创建一个简单的员工表,可以这样写:
CREATE TABLE Employees (
EmployeeID int PRIMARY KEY IDENTITY(1,1),
EmployeeName varchar(50) NOT NULL,
BirthDate date NULL,
DepartmentID int NOT NULL,
Email varchar(100) UNIQUE,
CreateTime datetime DEFAULT GETDATE()
);
这里解释一下:
EmployeeID是主键,用int类型,后面的IDENTITY(1,1)是SQL Server的一个特性,表示这个列是自动增长的,从1开始,每次增加1,这样我们插入新员工时就不用操心编号了,系统会自动分配。EmployeeName不允许为空。BirthDate允许为空。DepartmentID不允许为空,准备用来关联部门表(这里还没创建)。Email有唯一约束,确保不重复。CreateTime有默认值,自动记录创建时间。
最后要注意的几个点
- 先检查表是否存在:如果你不能确定这个表是不是已经存在,直接运行CREATE TABLE可能会报错,说“对象已存在”,一个稳妥的做法是在创建前先检查并删除可能存在的同名表,可以写
IF OBJECT_ID('表名') IS NOT NULL DROP TABLE 表名,然后再写CREATE TABLE语句,在生产环境删除表要极其小心。 - 权限问题:你得有在目标数据库里创建表的权限才行,不然会失败。
- 设计阶段多思考:建表容易改表难,一旦表里有了数据,再想修改列的数据类型或者删除列,可能会很麻烦,所以一开始设计的时候,就要把字段类型、长度、约束这些都考虑周全。
写CREATE TABLE语句就是这么一个过程:定好表名,规划好每个列的名字和数据类型,然后给重要的列加上主键、非空等约束,确保数据的准确性和完整性,多练习几次就熟悉了。
本文由钊智敏于2026-01-09发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:http://waw.haoid.cn/wenda/77482.html
