为“成绩管理”数据库中的tscore表设置触发器,限制“数据库”课程选课人数不超过3人,若选满,则提示“对不起,已选满!”;编写测试语句进行测试。
时间: 2024-12-24 13:37:07 浏览: 4
在SQL中,我们可以创建一个名为"limit_students"的触发器,当有新的学生尝试选择"数据库"课程时,这个触发器会检查tscore表中的该课程记录数是否超过3。如果超过了,就插入一条错误日志并阻止进一步的插入操作。这是一个基本的示例:
```sql
CREATE TRIGGER limit_students
AFTER INSERT ON tscore
FOR EACH ROW
BEGIN
DECLARE max_students INT;
SET max_students = (SELECT COUNT(*) FROM tscore WHERE course = '数据库');
IF max_students >= 3 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '对不起,已选满!';
END IF;
END;
```
这个触发器会在每次新记录插入到tscore表时运行。如果当前"数据库"课程的学生总数达到3人,它将抛出一个异常,模拟了返回错误消息的行为。
对于测试这个触发器,你可以编写以下SQL语句:
```sql
-- 测试触发器正常工作
INSERT INTO tscore (student_id, course) VALUES (1, '数据库');
INSERT INTO tscore (student_id, course) VALUES (2, '数据库'); -- 应该不会执行,因为已有3人选课
-- 预期错误情况
INSERT INTO tscore (student_id, course) VALUES (3, '数据库'); -- 应该收到错误信息
SHOW WARNINGS; -- 检查是否有警告信息,显示错误消息
-- 清理测试
DELETE FROM tscore WHERE course = '数据库'; -- 删除测试数据
```
在这个测试中,第一和第二个插入应该成功,而第三个插入会触发触发器并显示错误消息。
阅读全文