一、触发器的使用场景、优缺点

1.强制业务规则和数据完整性。

SqlServer中提供了2中方案,约束(主键约束、外键约束、Not Null约束、唯一约束以及检查约束)和触发器

触发器,可以编写T-sql代码,多表操作。

如果检测到严重错误(例如,磁盘空间不足),则整个事务即自动回滚。

2.触发器的优点

 1.触发器是自动的。当对表中的数据做了任何修改之后立即被激活。
   2.触发器可以通过数据库中的相关表进行层叠修改。
   3.触发器可以强制限制。

3.触发器的作用

强制数据库间的引用完整性
级联修改数据库中所有相关的表,自动触发其它与之相关的操作
跟踪变化,撤销或回滚违法操作,防止非法修改数据
返回自定义的错误消息,约束无法返回信息,而触发器可以
触发器可以调用更多的存储过程

二、触发器的分类

sql server包括三种常规类型的触发器:
DML数据操纵语言(Data Manipulation Language, DML)触发器、
DDL 数据库模式定义语言DDL(Data Definition Language)触发器
登录触发器

三、触发器使用说明

instered表和deleted表,这两张是逻辑表也是虚表。由系统在内存中创建者两张表,不会存储在数据库中。
两张表的都是只读的,只能读取数据而不能修改数据。
这两张表的结果总是与被该触发器应用的表的结构相同,当触发器完成工作后,这两张表就会被删除。
Inserted表的数据是插入或是修改后的数据

deleted表的数据是更新前的或是删除的数据

表操作

Inserted逻辑表

Deleted逻辑表

新增记录(insert)

存放增加的记录


修改记录(update)

存放更新后的记录

存放更新前的记录

删除记录(delete)


存放被删除的记录

四、触发器使用案例

1.触发器语法

--创建触发器的语法如下:
CREATE TRIGGER [触发器名称] ON [表名称]
	FOR UPDATE -- 或DELETE、或INSERT
AS 
	--Transact-SQL(业务逻辑代码)
--修改触发器语法
ALTER TRIGGER [触发器名称] ON [表名称]
	FOR UPDATE -- 或DELETE、或INSERT
AS 
	--Transact-SQL(业务逻辑代码)
 
--删除触发器语法
drop trigger 触发器名称

2.监听表update处理

create trigger tri_memberinfo on memberinfo
for update
as 
begin
  declare @memberid int,@TdTeam nvarchar(100),@ZdTeam nvarchar(100),@bankid int;
  select @memberid=id,@TdTeam=tdteam,@ZdTeam=zdteam,@bankid=bankid  from instered;

  --获取银行的
  declare @zdposition varchar(1000);
  select @zdposition=ZdPosition from Bank where id=@bankid;

  --修改数据表的团队或者战队
  update DataNum set TdTeam=@TdTeam ,ZdTeam=@ZdTeam,bankid=@bankid,ZdPosition=@zdposition where MemberID=@memberid;
  --print @memberid;
end;