使用SQL语句创建触发器 (1) 创建插入触发器并进行触发器的触发执行。 为表sc创建一个插入触发器 student_sc_insert,当向表sc插入数据时,先判断插入的学号是否有效地存在于student表中,如果插入的学号在student表中不存在,先在student表中插入该学号,再向表sc插入数据。 向表sc中插入一行数据:sno, cno,degree分别是(‘20070302’,‘c01’,78),该行数据插入后,观察插入触发器student_sc_insert是否触发工作,再插入一行数
时间: 2023-12-23 07:05:51 浏览: 206
创建插入触发器student_sc_insert:
```sql
CREATE TRIGGER student_sc_insert
BEFORE INSERT ON sc
FOR EACH ROW
BEGIN
DECLARE s_count INT;
SELECT COUNT(*) INTO s_count FROM student WHERE sno = NEW.sno;
IF s_count = 0 THEN
INSERT INTO student (sno) VALUES (NEW.sno);
END IF;
END;
```
执行插入操作:
```sql
INSERT INTO sc (sno, cno, degree) VALUES ('20070302', 'c01', 78);
```
触发器student_sc_insert会检查学生表中是否存在该学号,如果不存在,则会先在学生表中插入该学号,并且不会插入该学生的成绩记录。在这个例子中,由于学号20070302在学生表中不存在,所以会先插入该学号,然后再插入该学生的成绩记录。可以通过以下语句检查学生表和成绩表中的数据:
```sql
SELECT * FROM student;
SELECT * FROM sc;
```
输出结果应该为:
```
sno
20070302
sno cno degree
20070302 c01 78
```
再插入一行数据:
```sql
INSERT INTO sc (sno, cno, degree) VALUES ('20070303', 'c01', 85);
```
由于学号20070303在学生表中不存在,触发器会先插入该学号,然后再插入该学生的成绩记录。可以通过以下语句检查学生表和成绩表中的数据:
```sql
SELECT * FROM student;
SELECT * FROM sc;
```
输出结果应该为:
```
sno
20070302
20070303
sno cno degree
20070302 c01 78
20070303 c01 85
```
阅读全文