一、实验目的
2.创建表sc,并同时创建约束,表结构及约束要求如表2所示。
表2 sc的表结构
字段 类型 是否为空 约 束
学号 char(4) 否 外键参照stu表的学号列(约束名fk_sno)
课号 char(4) 否
成绩 decimal(5,2) 是 0≦成绩≦100
设置(学号,课号)为主键。
CREATE TABLE sc(
学号 CHAR(4) NOT NULL PRIMARY KEY,
课号 CHAR(4) NOT NULL PRIMARY KEY,
成绩 DECIMAL(5,2) NULL CHECK(0<=成绩<=100),
CONSTRAINT fk_sno FOREIGN KEY(学号) REFERENCES stu(学号,课号)
);
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 CONSTRAINT fk_cno;
ALTER TABLE sc
DROP CONSTRAINT 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);
CREATE TABLE test(
date_time VARCHAR(50)
);
(1)创建触发器test_trig,实现在stu表中每插入一条学生记录后,则自动在test表中追加一条插入成功时的日期时间。SYSDATE()函数用来获取当前的日期和时间。
CREATE TRIGGER test_trig AFTER INSERT ON stu
FOR EACH ROW
INSERT INTO test VALUES(SYSDATE());
(2)为stu表插入一条记录引发触发器,查看test表的内容。
INSERT INTO stu VALUES(‘1000’,‘张三’,‘男’,‘1999-09-09’);
SELECT*FROM test;
12.在course表上创建触发器del_trig,当course表上删除一门课程时,级联删除sc表该课程的记录。删除course表的一条记录,查看sc表相应记录是否被自动删除。
CREATE TRIGGER del_trig AFTER DELETE ON course
FOR EACH ROW
DELETE FROM sc WHERE sc.课号=OLD.课号;
DELETE FROM course WHERE 课号=‘1’;
SELECT * FROM sc;
四、实验思考