数据库实验三——完整性定义与检查
sqlserver版本
一、 实验题目
数据库完整性定义与检查
二、 实验内容和要求
完整性语言实验包含3个实验项目,其中2个必修项目,1个选修项目。该实验的各个实验项目均为验证型实验项目。
掌握实体完整性的定义和维护方法。
掌握参照完整性的定义和维护方法。
掌握用户自定义完整性的定义和维护方法。
三、 实验步骤
(一) 实体完整性实验
定义实体完整性,删除实体完整性。能够写出两种方式定义实体完整性的SQL语句:创建表时定义实体完整性、创建表后定义实体完整性。设计SQL语句验证完整性约束是否起作用。
实验重点:创建表时定义实体完整性。
实验难点:有多个候选码时实体完整性的定义。
1、创建表时定义参照完整性(列级)
--①、创建表时定义完整性(列级)
create table Student(
Sno char(9) primary key,--列级
Sname char(20) not null,
Ssex char(2),
Sage smallint,
Sdept char(20)
)
--查看约束
exec sp_helpconstraint @objname=Student
2、创建表时定义参照完整性(表级)
--②创建表时定义完整性(表级)
create table Student1(
Sno char(9),
Sname char(20) not null,
Ssex char(2),
Sage smallint,
Sdept char(20)
primary key(Sno)--表级
)
exec sp_helpconstraint @objname=Student1
当主码中有多个属性时,只能在表级定义主码
--③、当主码中有多个属性时,只能在表级定义主码
create table SC
(
Sno CHAR(9) NOT NULL,
Cno CHAR(4) NOT NULL,
Grade SMALLINT,
primary key(Sno,Cno) /*只能在表级定义主码*/
)
exec sp_helpconstraint @objname=SC
3、创建表后定义主体完整性
使用ALTER TABLE <表名> ADD CONSTRAIN <名称> PRIMARY KEY(<属性组>);
Sqlserver在建表后定义主码,需要保证主码不可以取空值。
错误版本:
--④创建表后定义主体完整性
create table Student2(
Sno char(9),--主码不可为空,错误
Sname char(20) not null,
Ssex char(2),
Sage smallint,
Sdept char(20)
)
alter table Student2 add constraint pk primary key(Sno)
正确版本:
create table Student3(
Sno char(9) not null,--正确版本
Sname char(20) not null,
Ssex char(2),
Sage smallint,
Sdept char(20)
)
alter table Student3 add constraint pk primary key(Sno)
exec sp_helpconstraint @objname=Student3
4、验证实体完整性
主码是否可以为空
--1、主码不能为空
INSERT INTO Student
VALUES (null,'张成民','男',18,'CS')
INSERT INTO Student(Sname,Ssex,Sage,Sdept)
VALUES ('张成民','男',18,'CS')
主码是否唯一
--2、主码不能重复
INSERT INTO Student
VALUES ('200215126','张成民','男',18,'CS')
INSERT INTO Student
VALUES ('200215126','妮妮','女',20,'CS')
select *from Student