创建触发器tri_RestrictXK,以保证每门课的选课人数不超过4人;(提示:可选用INSTEAD OF 触发器)
时间: 2024-02-25 13:56:31 浏览: 22
好的,您可以按照以下SQL语句创建一个INSTEAD OF触发器tri_RestrictXK:
```
CREATE TRIGGER tri_RestrictXK
INSTEAD OF INSERT ON 选课表
FOR EACH ROW
BEGIN
DECLARE num INT;
SELECT COUNT(*) INTO num FROM 选课表 WHERE 课程号 = NEW.课程号;
IF num >= 4 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '选课人数已满';
ELSE
INSERT INTO 选课表 (学号, 课程号) VALUES (NEW.学号, NEW.课程号);
END IF;
END;
```
这个触发器会在插入新的选课记录时自动触发,首先会统计该课程的已选人数,如果已经有4个人选了该课程,则会抛出一个异常,否则就会插入新的选课记录。
相关问题
头歌创建触发器tri_RestrictXK,以保证每门课的选课人数不超过4人;(提示:可选用INSTEAD
好的,这里是创建触发器的 SQL 代码:
```sql
CREATE TRIGGER tri_RestrictXK
INSTEAD OF INSERT ON 选课表
FOR EACH ROW
AS
BEGIN
-- 判断选课人数是否超过4人
IF (SELECT COUNT(*) FROM 选课表 WHERE 课程编号 = NEW.课程编号) >= 4
BEGIN
RAISERROR ('该课程已选满!', 16, 1);
ROLLBACK TRANSACTION;
END
ELSE
BEGIN
-- 插入新的选课记录
INSERT INTO 选课表 VALUES (NEW.学号, NEW.课程编号);
END
END;
```
这个触发器会在每次向选课表中插入新记录时触发,判断该课程已选人数是否超过4人,如果超过则会抛出错误并回滚事务,否则会插入新的选课记录。注意,在这个触发器中,INSTEAD OF 触发器可以替代 INSERT 操作,所以并不需要在外部再次调用 INSERT 语句。
以下所有内问题请分别用SQL语句实现并通过相关操作。 (1)创建触发器 tri_RestrictXK,以保证每门课的选课人数不超过10人(提示:用INSTEAD OF触发器)。 (2)创建触发器tri_UpdateTeacher,以保证在修改某课程的课程号时同时修改选课表中该课程的课程号(提示:用AFTER|FOR触发器)。
(1) 创建 INSTEAD OF 触发器 tri_RestrictXK:
```sql
CREATE TRIGGER tri_RestrictXK
INSTEAD OF INSERT ON 选课表
BEGIN
-- 判断插入的选课是否超过10人
IF (SELECT COUNT(*) FROM 选课表 WHERE 课程号 = NEW.课程号) >= 10 THEN
-- 如果超过10人,不插入数据
RAISE(ABORT, '该课程已选满');
ELSE
-- 如果未超过10人,插入数据
INSERT INTO 选课表(学号, 课程号) VALUES (NEW.学号, NEW.课程号);
END IF;
END;
```
(2) 创建 AFTER 触发器 tri_UpdateTeacher:
```sql
CREATE TRIGGER tri_UpdateTeacher
AFTER UPDATE OF 课程号 ON 课程表
BEGIN
-- 修改选课表中该课程的课程号
UPDATE 选课表 SET 课程号 = NEW.课程号 WHERE 课程号 = OLD.课程号;
END;
```