mysql inserted表_数据库触发器inserted和deleted详解

48304ba5e6f9fe08f3fa1abda7d326ab.png

create trigger updateDeleteTime

on user

for update

as

begin

update user set UpdateTime=(getdate()) from user inner join inserted on user.UID=Inserted.UID

end

48304ba5e6f9fe08f3fa1abda7d326ab.png

上面的例子是在执行更新操作的时候同时更新,一下修改时间。

关键在于Inserted表

触发器语句中使用了两种特殊的表:deleted 表和 inserted 表。

Deleted 表用于存储 DELETE 和 UPDATE 语句所影响的行的复本。在执行 DELETE 或 UPDATE 语句时,行从触发器表中删除,并传输到 deleted 表中。Deleted 表和触发器表通常没有相同的行。

Inserted 表用于存储 INSERT 和 UPDATE 语句所影响的行的副本。在一个插入或更新事务处理中,新建行被同时添加到 inserted 表和触发器表中。Inserted 表中的行是触发器表中新行的副本。

1.插入操作(Insert)

Inserted表有数据,Deleted表无数据

2.删除操作(Delete)

Inserted表无数据,Deleted表有数据

3.更新操作(Update)

Inserted表有数据(新数据),Deleted表有数据(旧数据)

应用实例

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->set ANSI_NULLS ON

set QUOTED_IDENTIFIER ON

go

-- =============================================

-- Author:

-- Create date:

-- Description:

-- =============================================

ALTER TRIGGER [dbo].[updatestart]

ON [dbo].[OrderTelecom] FOR update

AS

BEGIN

DECLARE @state int;

DECLARE @note2 varchar(50)

SELECT @state= Inserted.ortState,@note2 =Inserted.ortNote2 from Inserted

IF @state=1 AND @note2=1

begin

--当发短信猫取走记录时修改状态为成功和取过的状态

update OrderTelecom set OrderTelecom.ortState=2 ,OrderTelecom.ortSmsmessages='短信充值成功'

from OrderTelecom inner join Inserted on OrderTelecom.ortId=Inserted.ortId

end

if @state in(2,3,10) and @note2=0

begin

update OrderTelecom set ortNote2=1

from OrderTelecom inner join Inserted on OrderTelecom.ortId=Inserted.ortId

end

END


版权声明:本文为weixin_28820113原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。