MySQL中有inserted表吗_SQL触发器中的inserted表和
deleted表
简介:开发也有年头了,但是触发器确实⽤的⽐较少,但是⽆容置疑触发器确实不错,
最近项⽬要求需要⽤到的触发器特别多、频繁,觉得很有必要记录和积累下。
在触发器语句中⽤两个特殊的表⼀个是deleted表和inserted。
它们是通过触发器操作⾃动创建驻留在内存中的临时表。
--------------------------------------------------------------------------------------------------------------------------------------------
描述:
Deleted表⽤于存储 DELETE和 UPDATE语句所影响的⾏的复本。在执⾏DELETE或 UPDATE语句时,⾏从触发器表中删除,并传输到deleted表中。Deleted表和触发器表通常没有相同的⾏。
Inserted 表⽤于存储 INSERT 和 UPDATE 语句所影响的⾏的副本。在⼀个插⼊或更新事务处理中,新
建⾏被同时添加到 inserted 表和触发器表中。Inserted 表中的⾏是触发器表中新⾏的副本。
综上可以总结⼀下:
mysql 要钱吗触发器的操作
deleted表和inserted表的数据变化
插⼊操作(Insert)
Inserted表有数据,Deleted表⽆数据
删除操作(Delete)
Inserted表⽆数据,Deleted表有数据
更新操作(Update)
Inserted表有数据(新数据),Deleted表有数据(旧数据)
--------------------------------------------------------------------------------------------------------------------------------------------
实践:
下⾯将以触发器中的修改业务为例讲述Inserted和Deleted的结合操作;
在合同中根据编号部门改变⽽修改合同号;
在合同管理系统中⽣成的合同编号,
如对应部门修改,合同编号中对应部门代码对应修改,流⽔号不变;
修改前:15-TV-56-0996
修改后:15-TV-GB-0996
--合同修改 Begin
--触发器是插⼊还是更新 Begin
--通过对 Inserted逻辑表 Deleted逻辑表 的判断
--来确认是插⼊ 还是更新
DECLARE @DFlag BIT = 0
DECLARE @IFlag BIT = 0
IF EXISTS(SELECT * FROM DELETED)
SET @DFlag = 1
IF EXISTS(SELECT * FROM INSERTED)
SET @IFlag = 1
--触发器是插⼊还是更新 End
--修改合同的时候
IF @IFlag = 1 AND @DFlag = 1
IF update(new_dept_contract_r1) and exists(
select * from INSERTED i left join DELETED d
on i.New_contractId = d.New_contractId w_dept_contract_r1 <> d.new_dept_contract_r1 )
begin
--替换部门Code
declare @oldcode nvarchar(10),@newcode nvarchar(10),@contractid uniqueidentifier
select
@oldcode = '-'+old.New_dept_code+'-'
,@newcode = '-'+new.New_dept_code+'-'
,@contractid = i.New_contractId
from INSERTED i
left join DELETED d on i.New_contractId = d.New_contractId
left join dbo.A new w_dept_contract_r1 = new.New_deptId
left join dbo.A old w_dept_contract_r1 = old.New_deptId
update B
set new_contract_name = replace(new_contract_name,@oldcode,@newcode)
where New_contractId= @contractid
end
--合同修改 End
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论