数据表的创建是指数据表结构的定义,包括字段名、字段的数据类型、字段约束、表约束和表名的定义。本章使用名为“studentMIS”的数据库为例。
方式1 使用设计器管理表
1.启动SQL Server 2017数据库
在对象资源管理器中找到数据库。打开这个节点找到表,右击选择“新建表”,如图2.2所示。
图2.2 对象资源管理器
2.在表设计器窗口中定义表的结构
创建一张表结构,如图2.3所示。其中,字段的定义和方法如下:
图2.3 设置数据类型
➢设置字段名。在“列名”这一栏输入字段的名称,名称在该表中必须是唯一的。
➢选择字段的数据类型。在“数据类型”一栏中选择字段的数据类型,并设置数据类型的长度。
➢设置字段是否为空。在“允许空”一栏的复选框中设置该字段是否为空,如果该字段允许为空就选中复选框。
➢若希望某一列的整形数据能按规律自动增长,可使用标识列。设置的方法是:选择要设置的整形字段,在下方的“列属性”方框中找到“标识规范”,设置其为标识,并填写标识增量和标识种子,如图2.4所示。
图2.4 设置数据类型
3.用主键约束和唯一约束来实现实体完整性
主键约束就是在表中创建一个主键,主键的作用是使该字段的值不能出现重复。创建主键常用的有两种方式:
➢选中需设置为主键的字段,单击右键,选择“设置主键”,如图2.5所示。
➢选择需设置为主键的字段在工具栏里面有一个设置和移除主键按钮,单击即可,如图 2.6所示。
图2.5 设置主键
图2.6 设置主键
唯一(Unique)约束用来限制字段值不能重复。设置方法:选择工具栏中的“管理索引和键”,在弹出的对话框里面单击“添加”按钮,然后在对话框右边细目表中单击“列”对应的“浏览”按钮,选择需要设置的字段,接着将“是唯一的”一栏的值改为“是”,最后单击“关闭”按钮即可,如图2.7所示。
图2.7 创建唯一约束
4.用CHECK约束和默认约束来实现域完整性
使用CHECK约束,我们可以设置只有符合特定条件和格式的数据才能存入字段中,CHECK约束使用一个返回true或false的布尔表达式来检查要存入字段的值是否符合指定的条件。设置方法是:在表设计器窗口中单击右键找到CHECK约束,如图2.8所示。
图2.8 设置CHECK约束
在“CHECK约束”对话框的左下角单击“添加”按钮,添加一个CHECK约束,然后单击“表达式”后面的按钮,如图2.9所示。
图2.9 CHECK约束
在“CHECK约束表达式”对话框里面输入一个CHECK约束的表达式,如图2.10所示。
图2.10 CHECK约束表达式
然后单击“确定”按钮,CHECK约束就设置完成。
设置DEFAULT(默认值)约束。DEFAULT约束用于定义字段的默认值。设置的方法是:选择要设置的字段,在下方的“列属性”方框中找到“默认值或绑定”对应的文本框,在文本框里面输入默认值,如图2.11所示。
图2.11 设置默认值
5.用外键约束来完成参照完整性
外键关联是表之间常使用的一种关联,它是数据库完整性的一种保证。为了说明建立表之间外键关联的方法,这里需要建立另外一张表——成绩表。
下面以表studentInfo和表score为例,介绍创建两个数据表之间外键关联方法。
(1) 在studentInfo表中单击右键,选择“关系”菜单项,如图2.12所示。
图2.12 创建外键约束
(2) 在“外键关系”对话框的“常规”选择卡选择“表和列规范”后面的按钮,如图2.13所示。
图2.13 “外键关系”对话框
(3) 在“表和列”对话框里面选择要建立的关系表和字段,然后单击“确定”按钮,如图2.14所示。
图2.14 “表和列”对话框
然后回到“外键关系”对话框中,单击“关闭”按钮,最后保存数据表。
方式2 使用SQL语句管理表
在SQL Server中创建数据表的语法如下:
例2.1:创建数据表。
创建学生信息表(studentInfo)的SQL语句如下:
其中IDENTITY是studentId列的属性,它用于在表中创建标识列,即studentId为标识列。IDENTITY的使用语法为:
其中seed表示标识种子或者起始值,即向表中加载第一行时所使用的值。而increment表示递增量,即加到所加载上一行的标识值上的增量值。IDENTITY必须同时指定 seed和 increment,或者不指定任何值。如果不指定任何值,则默认为 (1,1)。
在SQL Server中,IDENTITY 属性只能用于int、bigint、smallint、tinyint 或decimal,或者是小数位数为 0 的 numeric等数据类型的列,并且这些列不可为空。一个表只能有一个 IDENTITY 列。
注意
在创建表之前,就应该先确定表中有哪些列,每列的数据类型、约束及表间关系。
在SQL Server中添加约束可以使用ALTER TABLE语句,其一般形式为:
参数说明,见表2.1。
表2.1 参数说明(www.xing528.com)
1.主键约束
主键约束在表中定义一个主键来唯一确定表中每一行数据,被主键约束的列(字段)是唯一的、非空的。
添加主键约束的语法:
注意
当多于一个字段时,上述语法添加的就是联合主键约束。联合主键一般用于字段中数据都可重复的表,但又要确保实体完整性,所以使用多个字段确保实体完整性。
例2.2:为studentInfo表建立主键约束。
上述语句将学员信息表的studentId字段设置为主键,命名时主键一般简写为“PK”。也可以在创建studentId表的时候建立主键约束,如:
注意
在创建表时建立约束可以省略CONSTRAINT关键字和约束名称,这同样适用于后面介绍的约束类型。即上述语句也可以这样写:
但若是这样,我们就没有指定约束名称。这时约束名称将由数据库自动指定,数据库指定的名称将比较复杂,不容易记住,如“PK_studentInfo_1920BF5C”后面那串东西是自动生成的序列号,所以若你觉得以后可能会使用此约束名称,那么用这种方式建立约束时最好不要省略约束名称。
2.唯一约束
唯一约束保证在一个字段或者一组字段里的数据与表中其他行的数据相比是唯一的。为表添加唯一约束的语法为:
注意
当多于一个字段时,如指定为“UNIQUE(A,B)”,添加此约束后,并不是指字段A、字段B单列的数据不能重复,而是指字段A和字段B作为一组的数据不能重复,这点与联合主键类似。
例2.3:为studentinfo表的studentNo字段建立唯一约束。
上述语句为学生信息表的学号字段studentId添加了唯一约束,命名时唯一约束一般简写为“UQ”。也可以在创建studentInfo表的时候建立唯一约束,如:
3.默认值约束
为表添加默认值约束的语法为:
默认值可以为常量或者为空(NULL)。
例2.4:为studentInfo表的studentAddress字段建立默认值约束。
上述语句为studentInfo表studentAddress字段设置了默认值为“地址不详”,命名时默认值约束一般简写为“DF”。也可以在创建studentInfo表的时候建立默认值约束,如:
4.检查约束
检查约束,即CHECK约束,它定义列中可接受的数据值,只有满足其条件的值才能插入到表中。可以将CHECK约束应用于多个列,也可以将多个CHECK约束应用于单个列。检查约束的语法为:
逻辑表达式可以是AND或者OR连接的多个简单逻辑表达式构成的复合型逻辑表达式,通过任何基于逻辑运算符返回结果TRUE或FALSE的逻辑表达式来创建CHECK约束。
例2.5:为studentInfo表的studentMobile字段建立CHECK约束。
studentMobile列存储的是学生的移动联系电话,电话长度必须是11个字符。
在命名约束名称时,我们一般将检查约束简写为“CK”。与前面介绍的其他约束一样,CHECK约束也可以在创建表的时候添加,例如在创建studentInfo表时为studentMobile添加CHECK约束。
5.外键约束
外键约束定义了表间关系,用于强制参照完整性,为表中一列或者多列数据提供参照完整性。
下面是建立外键约束的语法:
从表即外键表。主表字段在主表中必须是主键或者候补键。
例2.6:studentInfo表和score表建立外键关系。
score是成绩表,它的studentId字段应该引用studentInfo表的studentId字段。
外键约束的命名规则为:FK_从表名_主表名_外键字段名。
在创建score表时添加外键约束:
上述语句在创建score表时为studentId字段添加了外键约束,注意,在这里可以省略FOREIGN KEY关键字后面的从表字段,当然主表名及主表字段不可以省略。
这里我们一共介绍了5种常用约束的具体实现方法,但是你可能已经注意到,在添加每个约束时都使用了ALTER TABLE关键字,若某一张表需要建立多个约束,那么就需要使用多条ALTER TABLE语句实现,这未免有些麻烦,其实还可以使用如下方式:
上面使用一条语句添加了studentInfo表的3个约束,所以使用一条ALTER TABLE语句也可以为同一张表添加多个约束。
6.删除约束
约束被添加后是可以删除的,如约束建立错了,需要修改,就可以先删除已建立的约束,然后再使用前面介绍的方式添加约束。
删除约束的语法:
注意,CONSTRAINT关键字是可选的。
例2.7:删除约束示例。
假设在studentInfo表中存在一个名为PK_studentInfo_studentId的约束,则可以使用以下语句删除该约束。
当然,若你将表删除了,那相关的约束也就自动删除了。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。