数据库实验八

实验报告(八)

1.      实验目的

1)        了解数据库完整性约束的概念和作用

2)        掌握SQL命令创建、修改、删除约束的方法

2.      准备知识

1)        数据库完整性约束的基本概念和分类

2)        SQL语句创建、删除约束的语法

3.      实验内容和步骤

1)        给下面的表添加主键

Student表

列名

类型

是否允许为空

是否主外键

字段说明

sno

char(10)

not   null

主键

学号

sname

char(10)

not   null

姓名

sex

char(1)

not   null

性别

birth

date

not   null

出生日期

source

varchar(16)

null

生源地

clno

char(10)

not   null

班级号

tel

char(11)

null

电话

point

smallint

null

入学成绩

credit

smallint

null

学分

picture

varchar(30)

null

照片(存放地址)

email

varchar(30)

null

电子邮箱

remark

text

null

字段说明

Course表

列名

数据类型(宽度)

是否允许为空

是否主外键

字段说明

cno

char(6)

not   null

主键

课程号

cname

varchar(16)

not   null

课程名

credit

tinyint

not   null

学分

hour

smallint

not   null

学时

term

tinyint

not   null

开课学期(取值范围1-8)

Score表

列名

类型

是否允许为空

是否主外键

字段说明

sno

char(10)

not null

主键(外键)

学生编号

cno

char(6)

not null

主键(外键)

课程编号

score

decimal(4,1)

null

期末成绩

usual

decimal(4,1)

null

平时成绩

给Student表添加主键:

ALTER TABLE Student ADD PRIMARY KEY (sno);

给Course表添加主键:

ALTER TABLE Course ADD PRIMARY KEY (cno);

给Score表添加主键:

ALTER TABLE Score ADD PRIMARY KEY (sno, cno);

  

2)        利用SQL语句给course_class表的tno列设置恰当的外键

ALTER TABLE course_class
ADD CONSTRAINT FK_course_class_teacher
FOREIGN KEY (tno) REFERENCES teacher(tno);

3)        利用SQL语句为class表的clname与department增加UNIQUE约束,以保证同一个院系的班级不会重名。

ALTER TABLE class
ADD CONSTRAINT UC_class_clname_department
UNIQUE (clname, department);

(4)-(7)题如果自己的mysql版本不支持check,只需写出代码即可,无需截图

4)        利用SQL语句为student表的point列创建CHECK约束,规定入学成绩的取值范围为200~900。

ALTER TABLE student
ADD CONSTRAINT CHK_student_point
CHECK (point BETWEEN 200 AND 900);

            5) 利用SQL语句为teacher表的department列上创建CHECK约束。规定教师院系取值只能为“教务处”、“计算机学院”、“金融学院”和“化工学院”

ALTER TABLE teacher
ADD CONSTRAINT CHK_teacher_department
CHECK (department IN ('教务处', '计算机学院', '金融学院', '化工学院'));

6)        利用SQL语句为course表创建CHECK约束,规定学时除以学分必须大于等于16。

ALTER TABLE course
ADD CONSTRAINT CHK_course_hour_credit
CHECK (hour / credit >= 16);

7)        利用SQL语句删除student表中point列上的CHECK约束。

ALTER TABLE student
DROP CONSTRAINT CHK_student_point;

8)        利用SQL语句给score表的cno和sno列分别设置恰当的外键,要求当更新course表上的课程编号时,score表上的课程编号也随之更新,当删除student表中的学生时,该学生的在score表中的选课信息也随之删除

ALTER TABLE score
ADD CONSTRAINT FK_score_course
FOREIGN KEY (cno) REFERENCES course(cno)
ON UPDATE CASCADE;

ALTER TABLE score
ADD CONSTRAINT FK_score_student
FOREIGN KEY (sno) REFERENCES student(sno)
ON DELETE CASCADE;

9)     利用SQL语句在teacher表的tname列上创建唯一索引UQ_tname。用insert语句向teacher表中如下教师信息,并观察语句执行结果:

教师编号

教师姓名

密码

性别

电话

院系

身份

说明

0301

刘元朝

0301

Null

机械学院

1

Null

CREATE UNIQUE INDEX UQ_tname ON teacher (tname);
INSERT INTO teacher (tno, tname, password, gender, phone, department, identity)
VALUES ('0301', '刘元朝', '0301', '男', NULL, '机械学院', '1');

数据库实验八_第1张图片

你可能感兴趣的:(数据库原理,数据库)