假设我有一个表格,并设置after update
触发器,用于更新相同更改行中的列。
是否承诺在更新后但在某人尝试读取值之前立即执行触发器?
示例:
有一个更新触发器,将"IsNameSet"
设置为1
(修改name
时)
update myTable set name="a" where id={...}
然后立即(!)
select IsNameSet from myTable where id=...{modified row id}
是否可以保证我始终会看到1
?
答案 0 :(得分:2)
如果SELECT
在UPDATE
事务(包括触发器)提交之前发生,则它取决于读取事务的隔离级别。
在未提交的读取时,它可以读取name="a" and IsNameSet = 0
。
如果是快照,它可以读取行的更新前值。否则,在UPDATE
事务提交之前,它将被阻止读取行,并将读取“after”值。
根据具体要求,计算列可能比触发器更有效。