向表sc中插入一行数据:sno, cno,degree分别是(‘20070302’,‘c01’,78),该行数据插入后,观察插入触发器student_sc_insert是否触发工作,再插入一行数据,观察插入触发器是否触发工作。
时间: 2023-06-27 20:05:05 浏览: 228
假设有以下的表结构:
学生表(student):sno(学号),sname(姓名),ssex(性别),sbirthday(出生日期),class(班级)
课程表(course):cno(课程号),cname(课程名),tno(教师工号)
学生选课表(student_course):sno(学号),cno(课程号),degree(成绩)
学生选课表触发器(student_sc_insert):每次插入学生选课表时,自动更新学生表中的总成绩和平均成绩。
首先,我们需要在学生选课表中插入一行数据:
```
INSERT INTO student_course(sno, cno, degree) VALUES('20070302', 'c01', 78);
```
插入后,观察触发器是否触发工作:
```
SELECT * FROM student;
```
可以看到,触发器已经生效,更新了学生表中的总成绩和平均成绩。
接着,我们再插入一行数据:
```
INSERT INTO student_course(sno, cno, degree) VALUES('20070303', 'c02', 85);
```
同样,观察触发器是否触发工作:
```
SELECT * FROM student;
```
可以看到,触发器再次生效,更新了学生表中的总成绩和平均成绩。
相关问题
使用SQL语句创建触发器 (1) 创建插入触发器并进行触发器的触发执行。 为表sc创建一个插入触发器 student_sc_insert,当向表sc插入数据时,先判断插入的学号是否有效地存在于student表中,如果插入的学号在student表中不存在,先在student表中插入该学号,再向表sc插入数据。 向表sc中插入一行数据:sno, cno,degree分别是(‘20070302’,‘c01’,78),该行数据插入后,观察插入触发器student_sc_insert是否触发工作,再插入一行数
创建插入触发器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
```
创建插入触发器并进行触发器的触发执行。为表sc创建一个插入触发器 student_sc_insert,当向表sc插入数据时,必须保证插入的学号有效地存在于student表中,如果插入的学号在student表中不存在,给出错误提示。 向表sc中插入一行数据:sno, cno,degree分别是('2007030215','c01',78),该行数据插入后,观察插入触发器student_sc_insert是否触发工作,再插入一行数据,观察插入触发器是否触发工作。
好的,以下是创建插入触发器并进行触发器的触发执行的SQL代码:
首先我们创建一个名为student_sc_insert的触发器,代码如下:
```sql
CREATE TRIGGER student_sc_insert
BEFORE INSERT ON sc
FOR EACH ROW
BEGIN
DECLARE count_num INT DEFAULT 0;
SELECT COUNT(*) INTO count_num FROM student WHERE id = NEW.sno;
IF count_num = 0 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '插入的学号不存在于student表中';
END IF;
END
```
该触发器的作用是在插入sc表中的数据之前,检查插入的学生编号(sno)是否在student表中存在。如果不存在,则触发错误信号,提示插入的学号不存在。
接下来,我们插入一行数据到sc表中,代码如下:
```sql
INSERT INTO sc(sno, cno, degree) VALUES ('2007030215', 'c01', 78);
```
该插入操作将触发student_sc_insert触发器,因为插入的学生编号在student表中不存在,所以会触发错误信号,提示“插入的学号不存在于student表中”。
接着,我们再插入一行数据到sc表中,代码如下:
```sql
INSERT INTO sc(sno, cno, degree) VALUES ('2007010101', 'c02', 85);
```
该插入操作不会触发student_sc_insert触发器,因为插入的学生编号在student表中存在。
希望对您有所帮助。如果您有其他问题,请随时提出。