一、触发器的使用场景、优缺点
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;