《(2.1.4)--实验四完整性约束的创建(SQLServer版)《数据库系统概论》》由会员分享,可在线阅读,更多相关《(2.1.4)--实验四完整性约束的创建(SQLServer版)《数据库系统概论》(11页珍藏版)》请在金锄头文库上搜索。
1、实验四实验四 完整性约束的创建完整性约束的创建 一、实验目的一、实验目的 通过本实验使学生理解数据库完整性约束的概念,掌握 SQL Server 2008 的完整性约束的类型及相应的创建技术。 二、实验内容二、实验内容 1、定义和管理主键约束。 2、定义和管理唯一性约束。 3、定义和管理检查约束。 4、定义和管理外键约束。 5、定义和管理默认值约束。 三、实验步骤三、实验步骤 在关系数据库中, 实体完整性约束、 参照完整性约束和域完整性约束是必须满足的完整性约束条件。在 SQL Server 中,通过建立“约束”等措施来实现数据完整性约束,约束包括:主键(PRIMARY KEY)约束、唯一性(
2、UNIQUE)约束、检查(CHECK)约束、默认值(DEFAULT)约束和外键(FOREIGN KEY)约束。约束的建立可以通过对象资源管理器进行操作,也可以利用 T-SQL 语句进行设置;可以在定义表的同时创建,也可以在表创建完成后添加。 在 JWGL 数据库中,各个表中数据的完整性约束如下表 4-1 所示。 表 4-1 JWGL 数据库的约束 表 属性列 约束类型 取值要求 Student StuNo Primary Key Dno Foreign Key 参照 Dept 表的 Dno ClassNo Foreign Key 参照 Class 表的 ClassNo StuSex Check
3、 “男”,“女” Course CouNo Primary Key Credit Check 1,2,3,4,5,6 Credit Default 2 SC StuNo Primary Key Foreign Key 参照 Student 表的 StuNo CouNo Foreign Key 参照 Course 表的CouNo Grade Check 0-100 Teacher TeaNo Primary Key Dno Foreign Key 参照 Dept 表的 Dno TeaSex Check “男”,“女” TeaSex Default “男” Dept Dno Primary Key
4、 Dname Unique Tel Unique Class ClassNo Primary Key ClassName Unique TC TeaNo Primary Key Foreign Key 参照 Teacher 表的TeaNo CouNo Foreign Key 参照 Course 表的 CouNo ClassNo Foreign Key 参照 Class 表的 ClassNo (一)主键(一)主键(PRIMARY KEY)约束)约束 1、在 SQL Server Management Studio 中设置和修改主键 实验实验 4.1 在教务管理数据库 JWGL 中创建学生成绩表
5、SC 的主键。 步骤如下: 右键单击表 SC,选择“设计”菜单,打开表设计器。 在表设计器中, 单击要定义为主键的列的行选择器。 由于 SC 表的主键为属性列 StuNo和 CouNo,所以需要选择多列。此时在右键单击 StuNo 的行选择器同时按住 Ctrl 键,然后右键单击 CouNo 的行选择器,在弹出菜单中选择“设置主键”命令。如图 4-1 所示。 图 4-1 利用表设计器创建主键约束 实验实验 4.2 将 4.1 中设置的主键删除。 步骤如下: 右键单击表 SC,选择“设计”菜单,打开表设计器。 在表设计器中,右键单击 StuNo 的行选择器同时按住 Ctrl 键,然后右键单击 Co
6、uNo的行选择器,在弹出菜单中选择“删除主键”命令,将主键删除。 2、利用 T-SQL 语句定义和删除主键 (1)创建表的同时定义主键约束 实验实验 4.3 将 Dept 表删除,然后重新创建 Dept 表,同时定义主键。 在数据库引擎查询文档中输入以下语句: USE JWGL GO Drop Table Dept CREATE TABLE Dept ( Dno char(4) PRIMARY KEY, DName nvarchar(16), Dchair nvarchar(8), Daddress nvarchar(50), Tel varchar(50) ) GO 实验实验 4.4 先将实
7、验三中创建的 TC 表删除,然后重新创建 TC 表,同时定义主键。 CREATE TABLE TC ( TeaNo char(8), CouNo char(8), ClassNo char(8), Semester nvarchar(12), Classroom nvarchar(50), Classtime nvarchar(20) Primary key (TeaNo,CouNo,ClassNo) ) GO 单击“执行”按钮,执行该 SQL 语句,成功创建 TC 表的主键。 注意:当表的主键不是单一的列,而是多列的组合,此时应把主键约束创建为表级完整性约束。 (2)向已经创建的表中添加主键
8、约束 实验实验 4.5 在定义数据表 Student 时没有定义主键,利用 T-SQL 语句添加主键。 在数据库引擎查询文档中输入以下语句: USE JWGL GO ALTER TABLE Student ADD CONSTRAINT PK_StuNo PRIMARY KEY (StuNo) GO 单击“执行”按钮执行该程序段,创建名字为 PK_StuNo 的主键。 JWGL 数据库中 Course 表、Class 表、Teacher 表的主键约束可利用 ALTER 语句进行添加,在此不一一列出。 (3)删除主键约束 实验实验 4.6 删除 Student 表中的主键约束。 USE JWGL
9、GO ALTER TABLE Student DROP CONSTRAINT PK_StuNo (二)(二) 唯一性(唯一性(UNIQUE)约束)约束 为了确保列中的值是唯一的, 需要设置唯一性约束, 用户可以对一列或者多列定义唯一性约束。 1、在 SQL Server Management Studio 中设置唯一性约束 实验实验 4.7 在院系表 Dept 中的 DName 列上设置 UNIQUE 约束。 步骤如下: 右键单击 Dept 表设计器, 在弹出的快捷菜单中选择 “索引/键” 命令, 弹出 “索引/键”对话框。 在弹出的“索引/键”对话框中单击“添加”按钮,添加新的主/唯一键或索
10、引;在“常规”栏的“类型”右边选择“唯一键” ,在列的右边单击 按钮,选择列名 Stuname 和排序规律(ASC(升序)或 DESC(降序) ) ,如图 4-2 所示。 图 4-2 “索引/键”对话框 设置完成后,单击“关闭”按钮返回表设计器窗口,然后单击工具栏中的“保存”按钮,完成唯一性约束的创建。 2、用 T-SQL 语句定义和删除唯一性约束 (1)创建表时定义唯一性约束 实验实验 4.8 利用 SQL 语句定义班级表 Class, 同时在 ClassName 列上设置 UNIQUE 约束。 先将实验三中创建的 Class 表删除,然后在数据库引擎查询文档中输入以下语句: USE JWG
11、L GO CREATE TABLE Class ( ClassNo char(8) PRIMARY KEY, ClassName nvarchar(16) CONSTRAINT UN_ClassName UNIQUE, Monitor nvarchar(8), Dno char(4) ) GO 执行该 SQL 语句,在定义表 Class 表的同时创建了名称为 UN_ClassName 的唯一性约束。 实验实验 4.9 在定义数据表 Dept 时没有定义 Tel 上的唯一性约束,用 SQL 语句添加唯一性约束。 在数据库引擎查询文档中输入以下语句: USE JWGL GO ALTER TABLE
12、 Dept ADD CONSTRAINT UN_Tel UNIQUE (Tel) GO 实验实验 4.10 删除 Dept 表中 Tel 列上的约束。 USE JWGL GO ALTER TABLE Dept DROP CONSTRAINT UN_Tel GO (三)检查(三)检查(CHECK)约束)约束 CHECK 约束将用户输入到特定列的数据限制为指定的值。可以在单列或多列上声明CHECK 约束,只有单列 CHECK 约束可以和列一起定义,而且一列只能定义一个 CHECK约束,涉及多列的 CHECK 约束作为 CREATE TABLE 语句中单独的元素。 1、使用 SQL Server M
13、anagement Studio 创建 CHECK 约束 实验实验 4.11 为学生表 Student 中添加性别为“男”或“女”的约束。 打开 Student 表设计器窗口,单击工具栏中的 ,弹出“CHECK 约束”对话框,用来设置 CHECK 约束,如图 4-3 所示。 图 4-3 设置 Check 约束 用户可以在表达式中输入设置的约束条件, 然后设置该CHECK约束是否强制用于Insert和 Update,是否强制用于复制,是否在创建或重新启用时检查现有数据。选择“是” ,然后将该数据表保存。 2、使用 T-SQL 语句创建 CHECK 约束 (1)创建表的同时定义检查约束 实验实验
14、4.12 先将已经创建的 SC 表删除, 重新创建成绩表 SC, 同时定义成绩取值为 0100的约束。 在数据库引擎查询文档中输入以下语句: USE JWGL GO CREATE TABLE SC ( StuNo char(8), CouNo char(8), Grade Int CONSTRAINT CK_Grade CHECK(Grade=0 and Grade=100), Primary key(StuNo,CouNo) ) GO 执行该语句,创建名为 CK_Grade 的检查约束。 (2)在已经创建的表上定义检查约束 实验实验 4.13 在已经创建的 Course 表上,添加学分 Cr
15、edit 取值为 1,2,3,4,5,6 的约束。 在数据库引擎查询文档中输入以下语句: USE JWGL GO ALTER TABLE Course ADD CONSTRAINT CK_Credit CHECK(Credit in(1,2,3,4,5,6) GO 单击“执行”按钮,在 Course 表中成功添加名为 CK_Credit 的 check 约束。 实验实验 4.14 在已经创建的 Teacher 表中定义 TeaSex 列上的 CHECK 约束。 在数据库引擎查询文档中输入以下语句: USE JWGL GO ALTER TABLE Teacher ADD CONSTRAINT C
16、K_TeaSex CHECK(TeaSex=男 or TeaSex=女) GO 单击“执行”按钮,在 Teacher 表中成功添加名为 CK_TeaSex 的 check 约束。 实验实验 4.15 删除 Teacher 表中名为 CK_TeaSex 的约束。 在数据库引擎查询文档中输入以下语句: USE JWGL GO ALTER TABLE Teacher DROP CONSTRAINT CK_TeaSex GO 单击“执行”按钮,在 Teacher 表中成功删除名为 CK_TeaSex 的 check 约束。 (四)默认值(四)默认值(DEFAULT)约束)约束 DEFAULT 约束为列
17、提供默认值,它提供了域完整性。 1、使用 SQL Server Management Studio 创建 DEFAULT 约束 实验实验 4.16 为教师表 Teacher 中的性别字段 TeaSex 设置默认值为“男” 。 打开 Teacher 表设计器窗口,单击 TeaSex 字段,然后在窗口下部的“默认值或绑定”单元格中输入男。修改完毕,保存该表。如图 4-4 所示。 2、使用 T-SQL 语句创建 DEFAULT 约束 (1)创建表时定义 DEFAULT 约束 实验实验 4.17 创建课程表 Course,学分默认值为 2。 在数据库引擎查询文档中输入以下语句: USE JWGL GO
18、 CREATE TABLE Course ( CouNo char(4) PRIMARY KEY, CouName nvarchar(10) , Semester smallint, Credit Smallint CONSTRAINT DF_Credit DEFAULT 2, Lecture Smallint, Experiment Smallint ) GO 图 4-4 Teacher 表设置性别默认值 (2)删除 DEFAULT 约束 实验实验 4.18 将 Course 表中的 DF_Credit 约束删除。 在数据库引擎查询文档中输入以下语句: USE JWGL GO ALTER T
19、ABLE Course DROP CONSTRAINT DF_Credit GO 单击“执行”按钮,执行该 SQL 语句。 (3)在已创建的表中添加 DEFAULT 约束 实验实验 4.19 将 Course 表的 Credit 列默认值设置为 2。 USE JWGL GO ALTER TABLE Course ADD CONSTRAINT DF_Credit DEFAULT 2 FOR Credit GO (五)外键(五)外键(FOREIGN KEY)约束)约束 在对两个相关联的表进行数据插入和删除时, 通过参照完整性保证它们之间数据的一致性。通常利用 FOREIGN KEY 约束定义参照表
20、的外键,利用 Primary Key 和 Unique 约束定义主表中的主键或唯一键,可实现主表与从表之间的参照完整性。 1、使用 SQL Server Management Studio 创建 FOREIGN KEY 约束 实验实验 4.20 定义数据表 SC 的外键。 步骤如下: 在对象资源管理器中, 右键单击 JWGL 数据库的“数据库关系图”, 在弹出的菜单中选择“新建数据库关系图”。如图 4-5 所示。 在弹出的对话框中将所涉及的Student表、 Course表和SC表添加到数据库关系图中。如图 4-6 所示。 图 4-5 新建数据库关系图 图 4-6 “添加表”对话框 选中 SC
21、 表中的 StuNo 字段,将其拖到 Student 表上, 此时会弹出“表和列” 对话框,如图 4-7 所示。 用户可以在该对话框中设置外键的名称 FK_SC_Student, 单击 “确定” 按钮。 图 4-7 “表和列”对话框 选中 SC 表中的 CouNo 字段,将其拖到 Course 表上,在弹出的“表和列”对话框中设置外键名称 FK_SC_Course,形成如图 4-8 所示的关系图。 图 4-8 Student 表、Course 表和 SC 表关系图 保存该关系图,即创建了 SC 表和 Student 表、Course 表的参照关系。 实验实验 4.21 创建 TC 表中的外键约
22、束。 步骤同上所述,数据库关系图为图 4-9 所示。 图 4-9 Teacher 表、Class 表、Course 表和 TC 表关系图 2、使用 T-SQL 语句创建 FOREIGN KEY 约束 (1)创建表时定义外键约束 实验实验 4.22 将已经创建的 Class 表删除,重新创建 Class 表,同时定义外键。 在数据库引擎查询文档中输入以下语句: USE JWGL GO CREATE TABLE Class ( ClassNo char(8) PRIMARY KEY, ClassName nvarchar(16) NOT NULL, Monitor nvarchar(8), Dno
23、 char(4), CONSTRAINT FK_Class_Dno FOREIGN KEY(Dno) REFERENCES Dept(Dno) ) GO 执行该 SQL 语句,则在创建 Class 表时创建了名称为 FK_Class_Dno 的外键约束,要求Class 表中的 Dno 参照院系表 Dept 中的院系编号 Dno。 (2)在已经创建的表上定义外键 实验实验 4.23 在 Student 表上添加外键约束。 在数据库引擎查询文档中输入以下语句: USE JWGL GO ALTER TABLE Student ADD CONSTRAINT FK_Student_Dno FOREIGN
24、 KEY(Dno) REFERENCES Dept(Dno) ALTER TABLE Student ADD CONSTRAINT FK_Student_ClassNo FOREIGN KEY(ClassNo) REFERENCES Class(ClassNo) GO (3)删除外键约束 实验实验 4.24 删除 Student 表的外键约束 FK_Student_Dno。 在数据库引擎查询文档中输入以下语句: USE JWGL GO ALTER TABLE Student DROP CONSTRAINT FK_Student_Dno GO 注意:注意:在删除数据表时,要求被删除的表不被其他表引用,如果被引用了,必须先删除相关的外键或者是整个引用表。 本实验指导书参考数据库系统及应用实验与课程设计指导SQL Server 2008. 刘金岭.