2

假设我有一个表,我设置了一个 after update触发器来更新同一更改行中的列。

触发器是否承诺在更新之后但在有人尝试读取值之前立即执行?

例子 :

有一个更新触发器,设置"IsNameSet"1(何时name修改)

update myTable set name="a" where id={...}

然后立即(!)

select IsNameSet from myTable where id=...{modified row id}

它保证我会一直看到1吗?

4

1 回答 1

2

如果在事务(包括触发器)提交SELECT之前发生,UPDATE那么它取决于读取事务的隔离级别。

在未提交读取时,它可以读取name="a" and IsNameSet = 0

如果快照它可以读取行的更新前值。否则它将被阻止读取该行,直到UPDATE事务提交并将读取“之后”值。

根据确切的要求,这可能是计算列比触发器更有效的事情。

于 2013-06-28T11:41:05.180 回答