河南大学数据库实验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; |

相关推荐
海尔辛13 分钟前
SQL 基础入门
数据库·sql
betazhou1 小时前
有没有 MariaDB 5.5.56 对应 MySQL CONNECTION_CONTROL 插件
linux·数据库·mysql·oracle·mariadb
Elohim8152 小时前
数据库SQLite基础
数据库·sqlite
TDengine (老段)2 小时前
TDengine 支持的平台汇总
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
大熊猫侯佩2 小时前
由一个 SwiftData “诡异”运行时崩溃而引发的钩深索隐(四)
数据库·swiftui·apple watch
想用offer打牌3 小时前
面试官问:Redis和MySQL数据一致,为什么还需要MySQL?🤠
数据库·redis·mysql
chen.@-@3 小时前
后端下载限速(redis记录实时并发,bucket4j动态限速)
数据库·redis·缓存
王小小鸭3 小时前
【Oracle APEX开发小技巧12】
数据库·oracle
噼里啪啦啦.3 小时前
Spring事务和事务传播机制
数据库·sql·spring
搬码红绿灯4 小时前
MySQL主从复制深度解析:原理、架构与实战部署指南
数据库·mysql·架构