数据库实验报告
实验 3:完整性语言实验
实验 3.1 实体完整性实验
【实验目的】
掌握实体完整性的定义和维护方法。
【实验内容和要求】
定义实体完整性,删除实体完整性。能够写出两种方式定义实体完整性的 SQL 语句;创
建表时定义实体完整性、创建表后定义实体完整性。设计 SQL 语句验证完整性约束是否起作
用。
【实验重点和难点】
实验重点:创建表时定义实体完整性。
实验难点:有多个候选码时实体完整性的定义。
【实验工具】
SQL Server 2017、SQL Server Management studio
【实验过程】
(1)创建表时定义实体完整性(列级实体完整性)
定义供应商表的实体完整性
执行结果如下图所示:
1 / 13
数据库实验报告
(2)创建表时定义实体完整性(表级实体完整性)
定义供应商表的实体完整性
执行结果如下图所示:
(3)创建表后定义实体完整性
定义供应商表。
2 / 13
数据库实验报告
执行结果如下图所示:
(4)定义实体完整性(主码由多个属性组成)
定义供应关系表的实体完整性
执行结果如下图所示:
3 / 13
数据库实验报告
(5)有多个候选码时定义实体完整性
定义国家表的实体完整性,其中 nationkey 和 name 都是候选码,选择 nationkey 作为
主码,name 上定义唯一性约束。
执行结果如下图所示:
(6)删除实体完整性
删除国家实体的主码
执行结果如下图所示:
(7)增加两条相同记录,验证实体完整性是否起作用
4 / 13
数据库实验报告
执行结果如下图所示:
说明:可以看到,增加两条相同的记录,语句不能正常执行,这是因为该语句违反了主
键约束,插入了重复键。
【实验总结】
(1)SQL 中 char、varchar、nvarchar 的区别
1
char:char 是定长的,也就是当你输入的字符小于你指定的数目时,char(8),你
输入的字符小于 8 时,它会再后面补空值。当你输入的字符大于指定的数时,它会截取超出
的字符。
2
nvarchar(n):包含 n 个字符的可变长度 Unicode 字符数据。n 的值必须介于 1
与 4,000 之间。字节的存储大小是所输入字符个数的两倍。所输入的数据字符长度可以为
零。
3
varchar[(n)] :长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须
是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个
字节。所输入的数据字符长度可以为零。
(2)关于 sql 中 constraint 前缀的用意(PK、UK、DF、CK、FK)
·主键:constraint PK_字段 primary key(字段),
·唯一约束:constraint UK_字段 unique key(字段),
·默认约束:constrint DF_字段 default('默认值') for 字段,
·检查约束:constraint CK_字段 check(约束。如:len(字段)>1),
·主外键关系:constraint FK_主表_从表 foreign(外键字段) references 主表(主表主键
字段)
(3)进行创建表后定义实体完整性时,出现如下错误:
这是因为 primary key 约束是不允许为空的,在 suppkey integer 后面加上 not null
就可以解决了。
(4)所有列级完整性约束都可以改为表级完整性约束,而表级完整性约束不一定可以改写
为列级完整性约束,这是因为当主码有多个属性组成时,实体完整性必须定义在表级。
(5)实体完整性检查违约:
1 检查主码值是否唯一,如果不唯一则拒绝插入或修改。
2 检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改。
5 / 13
数据库实验报告
实验 3.2 参照完整性实验
【实验目的】
掌握参照完整性的定义和维护方法。
【实验内容和要求】
定义参照完整性,定义参照完整性的违约处理,删除参照完整性。写出两种方式定义参
照完整性的 SQL;创建表时定义参照完整性,创建表后定义参照完整性。
【实验重点和难点】
实验重点:创建表时定义参照完整性。
实验难点:参照完整性的违约处理定义。
【实验工具】
SQL Server 2017、SQL Server Management studio
【实验过程】
(1)创建表时定义参照完整性
定义地区表的实体完整性,再定义国家表上的参照完整性。
执行结果如下图所示:
6 / 13
(2)创建表后定义参照完整性
数据库实验报告
执行结果如下图所示:
(3)定义参照完整性(外码有多个属性组成)
定义订单项目表的参照完整性
执行结果如下图所示:
7 / 13
数据库实验报告
(4)定义参照完整性的违约处理
定义国家表的参照完整性,当删除或修改被参照表记录时,设置参照表中相应记录的值
为空值。
执行结果如下图所示:
(5)删除参照完整性
删除国家表的外码
执行结果如下图所示:
8 / 13