2012-07-03 80 views
5

我已经创建了on update触发器。更新触发器在多记录更新上触发的频率如何?

如果我在一个语句中更新表中的5条记录,触发器会执行多少次?如果我有多条语句更新单个事务中的记录,它会改变吗?

在所有交易完成后它执行5次还是仅执行一次?

+3

你在使用什么数据库服务器? Oracle,Sybase,SqlServer等? –

+1

您使用的是什么RDBMS?无论如何,如果你的更新是一个事务,那么无论有多少记录被更新(当然,如果它至少有一个),那么触发器将执行一次 – Lamak

+1

@Lamak:不正确。它取决于它是行级别还是语句级别触发器(当然,它也取决于DBMS,有些不支持行级触发器) –

回答

9

这一切都取决于您使用的触发器的类型。

  • 一个行级触发条件会为每一个由DML语句受影响的行(注意,这也是是基于一个SELECT或正在使用一个多行语法来插入更​​多INSERT陈述属实一次一行)
  • 语句级别触发器将为整个语句触发一次。

Oracle,PostgreSQL和DB2同时支持行级和语句级触发器。 Microsoft SQL Server仅支持语句级触发器,MySQL仅支持行级触发器。

0

考虑到您使用的是SQL Server,触发器只会在每次更新时触发一次。

如果这不是你想要的,你可以考虑使用不同的更新语句来确保触发器每次都会触发。

您可以在SQL触发器上查看this turorial。它涵盖了一切。

请注意,如果您使用的是Oracle,触发器可以基于行。不在SQL Server中。

2

使用SQL 2008: 如果您正在进行更新5行的1次更新,则应该只执行一次触发器。

这就是为什么你必须使用“INSERTED”和“DELETED”表来检测所有修改过的行。

如果您正在执行更新1行的5个更新,则触发器将执行5次。