SQL sever数据库触发器设计
一、目的:
能够理解触发器调用的机制。能够使用SQL命令创建DML触发器。能够完成触发器的修改、删除等管理任务。
二、触发器:
定义:触发器( T rigger )是 SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的 存储过程 ,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,经常用于加强数据的完整性约束和业务规则 。
三、触发器的创建示例:
创建触发器tr1,实现当修改学生表中的数据时,显示提示信息“学生表信息被修改了。”
/*触发器创建*/
use 学生作业管理
go
create trigger tr1 on 学生表
for update
as
print '学生表信息被修改了'
go
/*修改操作*/
use 学生作业管理
update 学生表 set 性别 = '男' where 学号 = 439
go
![在这里插入图片描述](https://img-blog.csdnimg.cn/0de68f15511d4b1e87210b001efb0ec3.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTk0NjIxMA==,size_16,color_FFFFFF,t_70)
使用触发器tr2,实现当修改学生表中某个学生的学号时,对应学生成绩表中的学号也要修改。
/*触发器创建*/
create trigger tr2 on 学生作业表
for update
as
declare @o1d_id int
declare @new_id int
select @o1d_id = 学号 from deleted
select @new_id = 学号 from inserted
if update(学号)
begin
update 学生作业表 set 学号 = @new_id where 学号 = @o1d_idend
go
/*修改操作*/
use 学生作业管理
update 学生表 set 学号 = 666 where 学号 = 439
go
![在这里插入图片描述](https://img-blog.csdnimg.cn/5b2aa506e1f5416f95c7bc1723de459c.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTk0NjIxMA==,size_16,color_FFFFFF,t_70)
创建一个DDL触发器tr3,禁止修改和删除当前数据库中表的任何数据。
/*触发器创建*/
use 学生作业管理
go
create trigger tr3 on 学生表
instead of delete
as
begin
declare @msg nvarchar( 255)
set @msg = '禁止册除和修改操作'
print @msg
end
delete from 学生表 where 学号 = 496
go
/*删除操作*/
delete from 学生表 where 学号 = 496
![在这里插入图片描述](https://img-blog.csdnimg.cn/96eccca687954753a4e0ef3e9c018186.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTk0NjIxMA==,size_16,color_FFFFFF,t_70)
查看学生表表中已创建的触发器。
use 学生作业管理
go
EXEC sp_helptrigger '学生表'
![在这里插入图片描述](https://img-blog.csdnimg.cn/2c16b51e49db42c2ac0aec7db9026498.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTk0NjIxMA==,size_16,color_FFFFFF,t_70)
查看已创建的触发器tr1的内容。 (1)查看触发器的内容:
use 学生作业管理
go
EXEC sp_helptext 'tr1'
go
(2)利用sp_help查看触发器的所有者和创建日期:
use 学生作业管理
go
EXEC sp_he1p 'tr1'
go
![在这里插入图片描述](https://img-blog.csdnimg.cn/a8c94aac9f9f463e94418efadca07441.png)
删除学生表上的触发器tr1。
drop trigger str1
|