创建触发器tri_RestrictXK,以保证每门课的选课人数不超过4人;(提示:可选用INSTEAD OF 触发器)
时间: 2024-02-01 13:13:24 浏览: 109
可以使用如下 SQL 语句创建 INSTEAD OF 触发器 tri_RestrictXK:
```
CREATE TRIGGER tri_RestrictXK
INSTEAD OF INSERT ON CourseSelect
FOR EACH ROW
BEGIN
DECLARE num INT;
SELECT COUNT(*) INTO num FROM CourseSelect WHERE CourseID = NEW.CourseID;
IF num < 4 THEN
INSERT INTO CourseSelect(StudentID, CourseID) VALUES (NEW.StudentID, NEW.CourseID);
ELSE
RAISE(ABORT, 'This course has reached its maximum capacity!');
END IF;
END;
```
该触发器将在每次向 CourseSelect 表中插入数据时触发,针对每个新插入的记录,检查该课程的选课人数是否超过4人,如果未超过,则将新记录插入表中;否则,触发 ABORT 异常并返回错误信息“该课程已经达到最大容量”。通过这样的方式,可以限制每门课程的选课人数不超过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;
```
阅读全文