数据库实验4---数据完整性

实验内容

  1. 创建students数据库,在该数据库下创建表stu,并同时创建约束,表结构及约束要求如表1所示。
    表1 stu的表结构
    字段 类型 是否为空 约 束
    学号 char(4) 否 主键
    姓名 char(8) 是
    性别 char(2) 是
    出生日期 date 是

  2. 创建表sc,并同时创建约束,表结构及约束要求如表2所示。
    表2 sc的表结构
    字段 类型 是否为空 约 束
    学号 char(4) 否 外键参照stu表的学号列(约束名fk_sno)
    课号 char(4) 否
    成绩 decimal(5,2) 是 0≦成绩≦100
    设置(学号,课号)为主键。

  3. 创建表course,并同时创建约束,表结构及约束要求如表3所示。
    表3 course的表结构
    字段 类型 是否为空 约 束
    课号 char(4) 否
    课名 char(20) 是 唯一约束(约束名uq_cname)
    学分 int 是

  4. 在course表的课号列建立主键约束。

  5. 在sc表的课号列建立外键约束fk_cno,参照course表的课号列的取值,要求实现级联更新。

  6. 在stu表的姓名列建立唯一约束名uq_sname。

  7. 在course表的学分列建立检查约束ck_xf,检查条件为学分>0。

  8. 删除sc表的外键约束fk_cno,fk_sno。

  9. 删除stu表的主键约束。
    10.删除course表的唯一约束uq_cname。
    11.创建测试表test,包含一个字段date_time,字段类型varchar(50);
    创建触发器test_trig,实现在stu表中每插入一条学生记录后,则自动在test表中追加一条插入成功时的日期时间。SYSDATE()函数用来获取当前的日期和时间。
    为stu表插入一条记录引发触发器,查看test表的内容。
    12.在course表上创建触发器del_trig,当course表上删除一门课程时,级联删除sc表该课程的记录。
    删除course表的一条记录,查看sc表相应记录是否被自动删除。

实验要求

1.粘贴SQL代码(小四号,宋体)及运行结果图,截图清晰。排版整齐统一,无大段空白。
2.学习通平台提交实验报告。
文件名:学号+ 姓名+班级+实验名

实验步骤及处理结果

粘贴SQL代码(小四号,宋体)及运行结果图

思考体会

参考资料


# 附 代码
#1. 创建students数据库,在该数据库下创建表stu,并同时创建约束,
CREATE DATABASE students;
USE students;
CREATE TABLE stu
(
    学号 CHAR(4) NOT NULL PRIMARY KEY,
    姓名 CHAR(8),
    性别 CHAR(2),
    出生日期 DATE
);
DESC stu;
SELECT * FROM stu;

#2. 创建表sc,并同时创建约束,
CREATE TABLE sc(
学号 CHAR(4) NOT NULL,
课号 CHAR(4) NOT NULL,
成绩 DECIMAL(5,2) CHECK (成绩 BETWEEN 0 AND 100),
PRIMARY KEY(学号,课号),
CONSTRAINT fk_sno FOREIGN KEY (学号) REFERENCES stu(学号)
);
DESC sc;
SELECT * FROM sc;

#3. 创建表course,并同时创建约束,
CREATE TABLE course
(
    课号 CHAR(4) NOT NULL,
    课名 CHAR(20),
    学分 INT,
    CONSTRAINT uq_cname UNIQUE (课名)
);
DESC course;
SELECT * FROM course;

#4. 在course表的课号列建立主键约束。
ALTER TABLE course
ADD PRIMARY KEY(课号);

#5. 在sc表的课号列建立外键约束fk_cno,参照course表的课号列的取值,要求实现级联更新。
ALTER TABLE sc
ADD CONSTRAINT fk_cno FOREIGN KEY(课号)REFERENCES course(课号)
ON UPDATE CASCADE;

#6. 在stu表的姓名列建立唯一约束名uq_sname。
ALTER TABLE stu
  ADD CONSTRAINT uq_sname UNIQUE(姓名);

#7. 在course表的学分列建立检查约束ck_xf,检查条件为学分>0。
ALTER TABLE course
ADD CONSTRAINT ck_xf CHECK(学分>0);

#8. 删除sc表的外键约束fk_cno,fk_sno。
ALTER TABLE sc
DROP FOREIGN KEY fk_cno;
ALTER TABLE sc
DROP FOREIGN KEY fk_sno;

#9. 删除stu表的主键约束。
ALTER TABLE stu
DROP PRIMARY KEY;

#10.删除course表的唯一约束uq_cname。
ALTER TABLE course
DROP INDEX uq_cname;

#11.创建测试表test,包含一个字段date_time,字段类型varchar(50);
#创建触发器test_trig,实现在stu表中每插入一条学生记录后,则自动在test表中追加一条插入成功时的日期时间。SYSDATE()函数用来获取当前的日期和时间。
#为stu表插入一条记录引发触发器,查看test表的内容。
CREATE TABLE test(
date_time varchar(50)
);
CREATE TRIGGER test_trg1
AFTER INSERT
ON stu
FOR EACH ROW
INSERT INTO test VALUES (SYSDATE());
INSERT INTO stu VALUES ('1','Marx','F','1995-10-13');
SELECT*FROM test;

# 12.12.在course表上创建触发器del_trig,当course表上删除一门课程时,级联删除sc表该课程的记录。
#删除course表的一条记录,查看sc表相应记录是否被自动删除。
CREATE TRIGGER del_trig
AFTER DELETE
ON course
FOR EACH ROW
DELETE FROM SC WHERE 课号=OLD.课号;
DELETE FROM course WHERE 课号='1';
SELECT*FROM SC;
posted @ 2022-10-08 01:19  昔痕  阅读(1532)  评论(0编辑  收藏  举报