创建一个名为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; |