河南大学数据库实验4

创建一个名为TEST数据库,要求如下:

(下面三个表中属性的数据类型需要自己设计合适的数据类型)

1、建立专业表speciality,它由专业号specno、专业名specname组成,其中专业号为主键,采用列级定义主键,专业名不能为空。

2、建立院系表department,它由院名dname、院长dean、院职工人数dnum组成。其中院名为主属性,采用表级定义主键。

3、建立一个"学生"表Student,它由学号sno、姓名sname、性别ssex、年龄sage、所在院系sdname、专业spec六个属性组成。采用表级定义主键。

4、对3题中创建的Student表,增加以下约束:

1)姓名不能为空

2)性别默认为'男'

3)性别取值只能为'男'、'女'

4)学生年龄大于10、小于40

5)学生表中的所在院系sdname参照department表的dname,删除规则是级联,更新规则是拒绝;学生表中的专业spec参照speciality表的specno,删除规则是设置为空,更新规则是级联。

5、完整性检验

1)实体完整性

用SQL语句,在学生表中插入一条学号为空的记录和重复学号的记录,观察运行的情况。说明为什么。

2)用户定义完整性检验

用SQL语句,在每个表中分别插入两条合法记录。

用SQL语句,非法的记录来检验第4题中的用户定义完整性约束条件。

3)参照完整性检验

用SQL语句,插入:分别在三个表中插入若干条记录。在学生表中插入记录时,注意sdname要参照院系表,spec要参照专业表。

用SQL语句,删除和修改:删除专业表中的,被学生表参照的一个专业记录,观察学生表中发生了什么变化,为什么?

修改专业表中的,被学生表参照的一个专业号,观察学生表中发生了什么变化,为什么?

用SQL语句,删除和修改:删除院系表中的,被学生表参照的一条记录,观察学生表中发生了什么变化,为什么?

修改院系表中的,被学生表参照的一条记录的院系名,观察学生表中发生了什么变化,为什么?

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 分别给出对应题目的代码及运行结果截图: 1、 CREATE DATABASE TEST; USE TEST; CREATE TABLE speciality ( specno INT (4) PRIMARY KEY , specname CHAR (6) NOT NULL ); 2、 CREATE TABLE department ( dname CHAR (6), dean CHAR (6), dnum INT (4), PRIMARY KEY (dname) ); 3、 CREATE TABLE Student ( sno INT (6), sname CHAR (6), ssex CHAR (4), sage INT (3), sdname CHAR (6), spec INT (4), PRIMARY KEY (sno) ); 4、1)姓名不能为空 ALTER TABLE Student MODIFY column sname CHAR (6) not NULL ; ALTER TABLE student MODIFY COLUMN ssex CHAR (4) DEFAULT '男'; 3)性别取值只能为'男'、'女' ALTER TABLE student ADD CONSTRAINT ssex_1 CHECK (ssex IN ('男','女')); 4)学生年龄大于10、小于40 ALTER TABLE student ADD CONSTRAINT sage_1 CHECK (sage>10 AND sage<40); ALTER TABLE student ADD CONSTRAINT sdname_1 FOREIGN KEY (sdname) REFERENCES department(dname) ON DELETE CASCADE ON UPDATE NO ACTION ; ALTER TABLE student ADD CONSTRAINT spec_1 FOREIGN KEY (spec) REFERENCES speciality(specno) ON DELETE SET NULL ON UPDATE CASCADE ; 5、 1)实体完整性 用SQL语句,在学生表中插入一条学号为空的记录和重复学号的记录,观察运行的情况。说明为什么。 INSERT INTO student(sno) VALUES (NULL ); 因为学号是主键,不能为空。 INSERT INTO student(sno,sname) VALUES (01,'烦'); INSERT INTO student(sno,sname) VALUES (01,'难'); 2)用户定义完整性检验 用SQL语句,在每个表中分别插入两条合法记录。 INSERT INTO student(sno,sname) VALUES (02,'真烦'); INSERT INTO student(sno,sname) VALUES (03,'真难'); INSERT INTO speciality VALUES (001,'软'); INSERT INTO speciality VALUES (002,'件'); INSERT INTO department VALUES ('软院','王',5); INSERT INTO department VALUES ('计院','六',4); 用SQL语句,非法的记录来检验第4题中的用户定义完整性约束条件。 1. 姓名不能为空 UPDATE student SET sname=NULL WHERE sno=02; 2)性别默认为'男' UPDATE student SET ssex=DEFAULT WHERE sno=02; 3)性别取值只能为'男'、'女' UPDATE student SET ssex='公' WHERE sno=03; 4)学生年龄大于10、小于40 UPDATE student SET sage=100 WHERE sno=03; 5)学生表中的所在院系sdname参照department表的dname,删除规则是级联,更新规则是拒绝;学生表中的专业spec参照speciality表的specno,删除规则是设置为空,更新规则是级联。 DELETE FROM department WHERE dname='软院'; UPDATE department SET dname='学院' WHERE dname='计院'; DELETE FROM speciality WHERE specno=001; UPDATE speciality SET specno=03 WHERE specno=002; 3)参照完整性检验 用SQL语句,插入:分别在三个表中插入若干条记录。在学生表中插入记录时,注意sdname要参照院系表,spec要参照专业表。 INSERT INTO speciality VALUES (013,'学'); INSERT INTO speciality VALUES (014,'院'); INSERT INTO speciality VALUES (015,'网'); INSERT INTO speciality VALUES (016,'软'); INSERT INTO department VALUES ('网院','李',5); INSERT INTO department VALUES ('软院','王',5); INSERT INTO department VALUES ('校院','孙',5); INSERT INTO department VALUES ('小院','关',2); INSERT INTO student(sno,sname,sdname,spec) VALUES (04,'不','网院',013); INSERT INTO student(sno,sname,sdname,spec) VALUES (05,'不好','软院',014); INSERT INTO student(sno,sname,sdname,spec) VALUES (06,'不好玩','校院',015); INSERT INTO student(sno,sname,sdname,spec) VALUES (07,'不可以','小院',016); 用SQL语句,删除和修改:删除专业表中的,被学生表参照的一个专业记录,观察学生表中发生了什么变化,为什么? DELETE FROM speciality WHERE specno=013; 学生表中参照的这个记录的专业号变为了空,因为设置的删除规则是设置为空。 修改专业表中的,被学生表参照的一个专业号,观察学生表中发生了什么变化,为什么? UPDATE speciality SET specno=114 WHERE specno=014; 学生表中参照的这个记录的专业号变为了修改后的专业号,因为设置的修改规则是级联。 用SQL语句,删除和修改:删除院系表中的,被学生表参照的一条记录,观察学生表中发生了什么变化,为什么? DELETE FROM department WHERE dname='网院'; 学生表中参照的这个记录删除了,因为删除规则设置的是级联。 修改院系表中的,被学生表参照的一条记录的院系名,观察学生表中发生了什么变化,为什么? UPDATE department SET dname='好玩校院' WHERE dname='校院'; 修改操作报错,学生表未变化,因为学生表中院系的更新规则设置的是拒绝。 |
| 总结: 本次实验让我学会了插入、修改和删除记录,学会了修改或添加用户自定义约束和外键及其违约处理的设置,三种完整性的检验。 问题:怎样设置外键的违约处理。 解决方法:直接在添加外键时在最后面使用on语句即可。 |
| 运用: 能应用到其他数据库中。 创建和修改表。 CREATE DATABASE ku; USE ku; CREATE TABLE reader ( rno INT PRIMARY KEY , rname CHAR (6), rsex CHAR (2) DEFAULT '男', bookname CHAR (8) ); CREATE TABLE book ( bookname CHAR (8) PRIMARY KEY , writer CHAR (5) ); ALTER TABLE reader ADD FOREIGN KEY (bookname) REFERENCES book(bookname) ON DELETE SET NULL ON UPDATE CASCADE ; 实体完整性。 INSERT INTO book VALUES ('字典','牛掰'); INSERT INTO book VALUES ('玄书','棒棒'); INSERT INTO reader VALUES (01,'王者','男','字典'); INSERT INTO reader VALUES (02,'荣耀','女','玄书'); INSERT INTO reader VALUES (01,'王小者','男','字典'); 参照完整性。 DELETE FROM book WHERE bookname='字典'; 用户定义的完整性。 UPDATE reader SET rsex=DEFAULT WHERE rno=02; |

相关推荐
阿里小阿希19 小时前
Vue3 + Element Plus 项目中日期时间处理的最佳实践与数据库设计规范
数据库·设计规范
白鹭19 小时前
MySQL源码部署(rhel7)
数据库·mysql
666和77720 小时前
Struts2 工作总结
java·数据库
还听珊瑚海吗20 小时前
SpringMVC(一)
数据库
星期天要睡觉21 小时前
MySQL 综合练习
数据库·mysql
Y40900121 小时前
数据库基础知识——聚合函数、分组查询
android·数据库
JosieBook1 天前
【数据库】MySQL 数据库创建存储过程及使用场景详解
数据库·mysql
处女座_三月1 天前
改 TDengine 数据库的时间写入限制
数据库·sql·mysql