在mysql中要求:用SQL语句创建两个触发器,保证数据库的完整性。 创建触发器,当学生表中某个“学号”的学生被删除时,自动将“stc"表中该学生的学习记录删除,即在“学生表”中建立删除触发器,实现“student”表和"stc”表的级联删除。
时间: 2024-05-23 20:15:22 浏览: 91
答:以下是创建两个触发器的SQL语句,满足要求:
-- 触发器1:当“student”表中的某个学生被删除时,自动将“stc”表中该学生的学习记录删除
CREATE TRIGGER trigger1
BEFORE DELETE ON student
FOR EACH ROW
BEGIN
DELETE FROM stc WHERE stc.stu_id = OLD.stu_id;
END;
-- 触发器2:当“course”表中的某个课程被删除时,自动将“stc”表中该课程的学习记录删除
CREATE TRIGGER trigger2
BEFORE DELETE ON course
FOR EACH ROW
BEGIN
DELETE FROM stc WHERE stc.course_id = OLD.course_id;
END;
上述代码中,第一条语句创建了名为“trigger1”的触发器,在“student”表的每一行被删除前自动执行,其中OLD关键字代表即将被删除的记录;DELETE语句将“stc”表中所有与该学生相关的记录删除。第二条语句创建了名为“trigger2”的触发器,与“trigger1”类似,功能是在“course”表的每一行被删除前自动执行,将“stc”表中所有与该课程相关的记录删除。通过这两个触发器可以实现“student”表和“stc”表的级联删除,保证了数据库的完整性。
相关问题
mysql中创建更新触发器。为student表创建一个更新触发器student_sno,当更改student表中某学生的学号时,要将sc表中该学生的学号更新。创建之后测试触发器是否有效
可以使用以下 SQL 语句创建更新触发器:
```
CREATE TRIGGER student_sno
AFTER UPDATE ON student
FOR EACH ROW
UPDATE sc SET sno = NEW.sno WHERE sno = OLD.sno;
```
其中,`student_sno` 是触发器的名称,`AFTER UPDATE ON student` 表示在 `student` 表上进行更新后触发该触发器,`FOR EACH ROW` 表示对于每一行记录执行触发器中的操作,`NEW` 表示新的值,`OLD` 表示旧的值。
在触发器创建完毕后,可以进行如下测试:
1. 更新 `student` 表中某个学生的学号,例如将学号为 "001" 的学生的学号更新为 "002",可以使用以下 SQL 语句:
```
UPDATE student SET sno = '002' WHERE sno = '001';
```
2. 查看 `sc` 表中该学生的学号是否已经更新,可以使用以下 SQL 语句:
```
SELECT * FROM sc WHERE sno = '002';
```
如果查询结果中包含该学生的记录,并且学号已经更新为 "002",则说明触发器已经生效。
18. 在student表上创建一个触发器(stud_insert),实现当插入一个学生学生记录的时候,保证学生的年龄只能是16~40岁(生日s_bir),性别s_sex只能是男或女。 19. 在student表上创建一个触发器(stud_update),实现当更新一个学生的学号s_no的时候,为了保证数据完整性,同时更新score表中该学生的学号。 20. 在student表上创建一个触发器(stud_delete),实现当删除一个学生记录的时候,为了保证数据完整性,同时删除该学生的所有课程成绩(score表中)。
好的,您的问题是关于数据库的三个触发器的创建。下面是对应的 SQL 语句:
创建触发器stud_insert:
```
CREATE TRIGGER stud_insert
BEFORE INSERT ON student
FOR EACH ROW
BEGIN
IF NEW.s_bir < DATE_SUB(NOW(), INTERVAL 40 YEAR) OR NEW.s_bir > DATE_SUB(NOW(), INTERVAL 16 YEAR) THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '年龄必须在16~40岁之间';
END IF;
IF NEW.s_sex != '男' AND NEW.s_sex != '女' THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '性别必须是男或女';
END IF;
END
```
创建触发器stud_update:
```
CREATE TRIGGER stud_update
AFTER UPDATE ON student
FOR EACH ROW
BEGIN
IF OLD.s_no != NEW.s_no THEN
UPDATE score SET s_no = NEW.s_no WHERE s_no = OLD.s_no;
END IF;
END
```
创建触发器stud_delete:
```
CREATE TRIGGER stud_delete
AFTER DELETE ON student
FOR EACH ROW
BEGIN
DELETE FROM score WHERE s_no = OLD.s_no;
END
```
请注意,这些触发器的语法可能因数据库类型而异。以上语句是基于 MySQL 数据库的语法。
阅读全文