3.在学生表中创建一个触发器,不允许删除200515001这个学生的记录。思路:使用after触发器,判断inserted表中的学号是否是200515001,如果是,回滚事务(rollback transaction),输出不能删除这个学生记录。验证该操作,并对操作结果截图。
时间: 2023-12-29 18:06:34 浏览: 64
下面是创建触发器的 SQL 代码:
```sql
CREATE TRIGGER tr_no_delete_student_200515001
ON student
AFTER DELETE
AS
BEGIN
IF EXISTS (SELECT 1 FROM deleted WHERE Sno = '200515001')
BEGIN
ROLLBACK TRANSACTION
PRINT 'Cannot delete the record of student 200515001'
END
END
```
该触发器在删除学生表中的记录之后触发。首先,它会检查被删除的记录是否是学号为200515001的学生。如果是,它会回滚事务并输出一条错误信息。
接下来,我们删除学号为200515001的学生的记录:
```sql
DELETE FROM student WHERE Sno = '200515001';
```
执行该语句后,我们可以看到如下结果:
```
(1 行受影响)
Cannot delete the record of student 200515001
Msg 3609, Level 16, State 1, Line 2
The transaction ended in the trigger. The batch has been aborted.
```
这表明触发器已成功阻止了删除学号为200515001的学生的记录,并输出了错误信息。此时,我们可以验证该学生的记录是否仍然存在:
```sql
SELECT * FROM student WHERE Sno = '200515001';
```
查询结果显示该学生的记录仍然存在:
```
Sno Sname Ssex Sage Sdept
----------- ----------- ----------- ----------- -------------
200515001 张三 男 20 计算机科学与技术
(1 行受影响)
```
这表明触发器的功能已经实现。
阅读全文