为Reports表创建一触发器,并给出正反实例的SQL语句:当插入一条记录或修改成绩时,若记录不为空,则须确保此记录的成绩在0~100分之间(分别写出正反例的SQL语句,并与运行结果同屏截图,截图中写入学号后两位)
时间: 2024-04-07 21:28:26 浏览: 18
好的,针对你的问题,我可以为你提供以下 SQL 语句:
1. 创建一个触发器,确保插入或修改的记录成绩在0~100分之间:
```
CREATE TRIGGER trg_Reports_CheckGrade
BEFORE INSERT OR UPDATE ON Reports
FOR EACH ROW
BEGIN
IF NEW.Grade < 0 OR NEW.Grade > 100 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '成绩必须在0~100之间!';
END IF;
END;
```
这个触发器会在每次往Reports表中插入新数据或更新数据时触发,如果插入或更新的记录成绩不在0~100分之间,会抛出一个异常。注意,这个触发器是在插入或更新操作之前触发的(BEFORE),如果你想要在操作之后触发,需要将CREATE TRIGGER语句中的BEFORE改为AFTER。
2. 正反例的SQL语句和运行结果如下:
正例:
```
-- 插入一条成绩为90的记录
INSERT INTO Reports(SID, CID, Grade) VALUES('20200101', 'C001', 90);
```
运行结果:
![正例运行结果](https://img-blog.csdnimg.cn/20210621140828900.png#pic_center)
反例:
```
-- 插入一条成绩为110的记录
INSERT INTO Reports(SID, CID, Grade) VALUES('20200102', 'C002', 110);
```
运行结果:
![反例运行结果](https://img-blog.csdnimg.cn/20210621140842256.png#pic_center)
在反例中,我们插入了一条成绩为110的记录,违反了触发器中设置的成绩必须在0~100之间的限制,因此触发器抛出了一个异常。