实验五 数据库的完整性

版权声明:原创文章,未经许可不能转载 https://blog.csdn.net/qq_38499625/article/details/80211740

实验内容

(1)创建一个名为Test_Integrity的数据库。

(2)用命令方式在数据库中创建student表,course表和sc表,注意其中的约束按如下方式进行定义:ssex字段定义为表级约束,grade字段定义为行级约束并为其定义一个约束名,其它的约束自己决定定义方式。

表结构如下:

student(学生信息表):

列名

数据类型

宽度

空否

取值范围

 

主码

sno

char

9

N

 

学号

 

sname

char

10

N

UNIQUE

姓名

 

ssex

char

8

Y

只能取‘男’或‘女’

性别

 

sage

smallint

 

Y

 

年龄

 

sdept

char

15

Y

 

系名

         course(课程表):

列名

数据类型

宽度

空否

 

主码

cno

Char

4

N

课程号

 

cname

Char

20

N

课程名称

外码 

cpno

Char

4

Y

先行课号

 

ccredit

smallint

 

Y

学分

         sc(学生选课表):

列名

数据类型

宽度

空否

外码

参照关系

取值范围

 

主码

sno

Char

9

N

外码

student

 

学号

cno

Char

4

N

外码

course

 

课程号

 

grade

smallint

 

Y

 

 

0x100

成绩

(3)向student表插入姓名列为“李晨”,其它列为空的学生记录,查看是否能够插入成功,若不能请分析原因。

(4)向student表分别插入学号相同的两个学生记录,若不能插入成功,请分析原因。

不能插入成功,因为在Student表中,Sno为主键,不能重复,而且Sname不能为空。违反了约束条件。

(5)向student表分别插入学号不同,姓名相同的两个学生信息时,查看发生的情况。

(6)向student表插入信息(“01”,“刘生”,“未知”,20,“IS”),查看是否能够插入成功,若不能请分析原因。

(7)使用Alter Table语句修改表student,增加对sage字段的check约束,使得列的值“不小于12”,输入学号为02,名为“刘生”的信息,当插入该学生的sage列分别为1112时查看发生什么情况,并分析原因。

8修改sc表中对于grade列的约束,将其改为grade在0到150之间。

(9)向course表插入元组(“01”,“数据库”,“05”,3)时,查看是否能够正常插入,如不能请分析原因。

 

实验过程、存在的问题及解决办法:

(1)创建一个名为Test_Integrity的数据库。

(2)用命令方式在数据库中创建student表,course表和sc表,注意其中的约束按如下方式进行定义:ssex字段定义为表级约束,grade字段定义为行级约束并为其定义一个约束名,其它的约束自己决定定义方式。

表结构如下:

student(学生信息表):

列名

数据类型

宽度

空否

取值范围

 

主码

sno

char

9

N

 

学号

 

sname

char

10

N

UNIQUE

姓名

 

ssex

char

8

Y

只能取‘男’或‘女’

性别

 

sage

smallint

 

Y

 

年龄

 

sdept

char

15

Y

 

系名

         course(课程表):

列名

数据类型

宽度

空否

 

主码

cno

Char

4

N

课程号

 

cname

Char

20

N

课程名称

外码 

cpno

Char

4

Y

先行课号

 

ccredit

smallint

 

Y

学分

         sc(学生选课表):

列名

数据类型

宽度

空否

外码

参照关系

取值范围

 

主码

sno

Char

9

N

外码

student

 

学号

cno

Char

4

N

外码

course

 

课程号

 

grade

smallint

 

Y

 

 

0x100

成绩

create table Student(

Sno char(9) primary key,

Sname char(10) unique not null,

Ssex char(8) check (Ssex in('','')),

Sage smallint,

Sdept char(15)

);

 

create table Course(

Cno char(4) primary key,

Cname char(20) not null,

Cpno char(4),

Ccredit smallint,

Foreign key(Cpno) references Course(Cno),

);

 

create table SC(

Sno char(9),

Cno char(4),

Grade smallint check (Grade between 0 And 100),

primary key(Sno,Cno),

foreign key(Sno) references Student(Sno),

foreign key(Cno) references Course(Cno)

);

(3)向student表插入姓名列为“李晨”,其它列为空的学生记录,查看是否能够插入成功,若不能请分析原因。

insert into Student(Sname) values('李晨')

不能插入成功,因为在Student表中,Sno为主键,不能为空。

(4)向student表分别插入学号相同的两个学生记录,若不能插入成功,请分析原因。

insert into Student(Sno ) values('201215128')

insert into Student(Sno ) values('201215128')

不能插入成功,因为在Student表中,Sno为主键,不能重复,而且Sname不能为空。违反了约束条件。

(5)向student表分别插入学号不同,姓名相同的两个学生信息时,查看发生的情况。

insert into Student(Sno,Sname) values('201215128','张三')

insert into Student(Sno,Sname) values('201215129','张三')

第一条语句插入成功,第二条语句插入失败。

在Student表中,Sname限定是唯一,因此不能插入。

(6)向student表插入信息(“01”,“刘生”,“未知”,20,“IS”),查看是否能够插入成功,若不能请分析原因。

insert into Student values('01','刘生','未知','20','IS')

插入失败。在Student约束条件中,Ssex表级约束为‘男’或‘女’,此处为‘未知’,因此插入失败。

(7)使用Alter Table语句修改表student,增加对sage字段的check约束,使得列的值“不小于12”,输入学号为02,名为“刘生”的信息,当插入该学生的sage列分别为1112时查看发生什么情况,并分析原因。

Alter table Student add check (Sage>=12)

insert into Student(Sno,Sname,Sage) values('02','刘生','11')

不能插入,因为11,不满足条件

insert into Student(Sno,Sname,Sage) values('02','刘生','12')

可以插入,因为12满足约束条件

 

8修改sc表中对于grade列的约束,将其改为grade在0到150之间。

Alter table sc add check(grade between 0 and 150)

(9)向course表插入元组(“01”,“数据库”,“05”,3)时,查看是否能够正常插入,如不能请分析原因。

insert into Course values('01','数据库','05','3')

不能插入,由于Student中的Sno的唯一性约束,01在表中已经出现过,因此插入失败。

猜你喜欢

转载自blog.csdn.net/qq_38499625/article/details/80211740