1、实验八:数据库的完整性约束一、实验目的1. 掌握主键约束、外键约束及及 check 约束的用法;2. 掌握默认值约束的应用。二、实验环境已安装 SQL Server 2008 企业版的计算机;具有局域网环境,有固定 IP;三、实验学时2 学时四、实验要求1. 熟悉数据库完整性相关概念及约束;2. 了解约束、默认值;3. 完成实验报告;五、实验准备知识1、创建 primary key约束(1)在创建数据表时创建 primary key约束CREATE TABLE table_name(column_name data_type PRIMARY KEY | unique | NOT NULL ,
2、column_name data_type PRIMARY KEY | unique | NOT NULL.PRIMARY KEY(column ,.n)(2)在修改表时同时创建 primary key约束ALTER TABLE table_nameADD primary key(column ,.n)2、创建 Foreign key约束(1)创建表时同时定义 Foreign key约束CREATE TABLE table_name(column_name data_type FOREIGN KEY REFERNCES ref_table(ref_column), column_name da
3、ta_type FOREIGN KEY REFERNCES ref_table(ref_column).FOREIGN KEY (column) REFERNCES ref_table(ref_column)(2)通过修改表定义 Foreign key约束ALTER TABLE table_nameADD FOREIGN KEY (column)REFERNCES ref_table(ref_column )3、创建 check约束(1)创建数据表时创建 check约束CREATE TABLE table_name(column_name data_type NOT NULL | CHECK
4、(logical_expression).CHECK (logical_expression) )(2)在修改数据表时添加 check约束ALTER TABLE table_nameADD CHECK (logical_expression)4、创建 default约束(1)创建数据表时创建 default约束Create table table_name( column_name datatype not null | DEFAULT (constraint_expression)(2)修改数据表时添加一个字段的同时创建 default约束Alter table table_nameADD
5、column_name datatype not null | DEFAULT (constraint_expression) with values(3)对表中指定的列定义默认值约束Alter table table_nameADD DEFAULT (constraint_expression) For column5、完整性约束命名子句CONSTRAINT PRIMARY KEY 短语FOREIGN KEY 短语CHECK 短语 6、删除 primary key约束或 unique约束ALTER TABLE table_nameDROP CONSTRAINT constraint_name
6、 , .n六、实验内容及步骤使用 T-SQL 语句实现以下操作;1. 请用至少 2 种方法定义 stu 数据库中 student 表的主键 sno;方法 1:CREATE TABLE Student (Sno CHAR(9) PRIMARY KEY, Sname CHAR(20), Ssex CHAR(2),Sage SMALLINT,Sdept CHAR(20)方法 2:CREATE TABLE Student (Sno CHAR(9), Sname CHAR(20), Ssex CHAR(2),Sage SMALLINT,Sdept CHAR(20),PRIMARY KEY(Sno)2.
7、将数据库 stu 的表 course 的 cno 字段定义为主键,约束名称为cno_pk;Alter table courseAdd constraint cno_pk primary key (cno)3. 为表 course 中的字段 cname 添加唯一值约束;Alter table courseAdd constraint cname_pk unique (cname)4. 将数据库 stu 的表 sc 的 sno 及 cno 字段组合定义为主键,约束名称为sc_pk;Alter table scAdd constraint sc_pk primary key (sno,cno)5.
8、对于数据表 sc 的 sno、cno 字段定义为外码,使之与表 student 的主码 sno 及表 course 的主码 cno 对应,实现如下参照完整性:1) 删除 student 表中记录的同时删除 sc 表中与该记录 sno 字段值相同的记录;2) 修改 student 表某记录的 sno 时,若 sc 表中与该字段值对应的有若干条记录,则拒绝修改;3) 修改 course 表 cno 字段值时,该字段在 sc 表中的对应值也应修改;4) 删除 course 表一条记录时,若该字段在在 sc 表中存在,则删除该字段对应的记录;Use stuCreate table student(Sn
9、o CHAR(9), Sname CHAR(20),Ssex CHAR(2),Sage SMALLINT,Sdept CHAR(20),PRIMARY KEY(Sno)Create table course (cno char(4), cname char(40), cpno char(4),ccedit smallint,foreign key (cpno) references course(cno),primary key (cno)Create table sc(sno char(9),cno char(4),Grade smallint,foreign key (sno) refer
10、ences student(sno)on delete cascade on update no action,foreign key (cno) references course (cno) on delete cascade on update cascade)6. 定义 check 约束,要求学生学号 sno 必须为 9 位数字字符,且不能以0 开头,第二三位皆为 0;Alter table studentAdd CONSTRAINT sno_ckCheck (sno like 1-900 0-9 0-9 0-9 0-9 0-9 0-9)7. 定义 stu 数据库中 student 表
11、中学生年龄值在 16-25 范围内;CREATE TABLE Student (Sno CHAR(9) PRIMARY KEY, Sname CHAR(20), Ssex CHAR(2),Sage SMALLINT Check (sage=16 and sage=25),Sdept CHAR(20)8. 定义 stu 数据库中 student 表中学生性别列中只能输入“男”或“女” ;CREATE TABLE Student (Sno CHAR(9) PRIMARY KEY, Sname CHAR(20), Ssex CHAR(2) Check(Ssex in (男, 女),Sage SMALLINT,Sdept CHAR(20)9. 定义 stu 数据库 student 表中学生年龄值默认值为 20;CREATE TABLE Student (Sno CHAR(9) PRIMARY KEY, Sname CHAR(20), Ssex CHAR(2),Sage SMALLINT Default 20,Sdept CHAR(20) 七、出现问题及解决办法如:某些操作无法执行,如何解决?