用SQL(1)创建触发器 tri _RestrictXK,以保证每门课的选课人数不超过10人 (用 INSTEAD OF 触发器)。 (2)创建触发器tri_UpdateTeacher,以保证在修改某课程的课程号时同时修改选课表中该课程的课程号(用AFTER|FOR触发器)
时间: 2024-03-02 14:49:46 浏览: 203
好的,我来回答你的问题。
首先,针对你的第一个问题,下面是对应的 SQL 代码:
```sql
CREATE TRIGGER tri_RestrictXK
INSTEAD OF INSERT ON 选课表
FOR EACH ROW
BEGIN
-- 获取当前课程的选课人数
DECLARE num INT;
SELECT COUNT(*) INTO num FROM 选课表 WHERE 课程号 = NEW.课程号;
-- 判断选课人数是否超过限制
IF num >= 10 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '该课程已选满';
ELSE
INSERT INTO 选课表 (学号, 课程号) VALUES (NEW.学号, NEW.课程号);
END IF;
END;
```
上面的代码中,我们创建了一个名为 `tri_RestrictXK` 的触发器,它会在插入数据到 `选课表` 表时触发。每次触发时,我们会获取当前课程的选课人数,如果已经超过了限制(10人),则会抛出一个错误,否则会插入新的选课记录。
接下来,针对你的第二个问题,下面是对应的 SQL 代码:
```sql
CREATE TRIGGER tri_UpdateTeacher
AFTER UPDATE ON 课程表
FOR EACH ROW
BEGIN
UPDATE 选课表 SET 课程号 = NEW.课程号 WHERE 课程号 = OLD.课程号;
END;
```
上面的代码中,我们创建了一个名为 `tri_UpdateTeacher` 的触发器,它会在更新数据到 `课程表` 表时触发。每次触发时,我们会更新 `选课表` 表中所有课程号为旧课程号的选课记录,将其更新为新的课程号。
希望这些 SQL 代码对你有所帮助!
阅读全文