SQL 嵌套事务
Posted
技术标签:
【中文标题】SQL 嵌套事务【英文标题】:SQL Nested transaction 【发布时间】:2015-09-12 07:54:36 【问题描述】:需要解释以下查询。 在提交外部事务 T 时,该行已被嵌套事务删除。但仍然选择并显示 ID 为 2 的值。
BEGIN TRAN T
SELECT * from tbl_types where ID=2
BEGIN TRAN nested
DELETE from tbl_types where ID=2
COMMIT TRAN nested
COMMIT TRAN T
【问题讨论】:
见execution plan,这是正常的顺序 这是关于“脏读”的。考虑阅读***.com/questions/20840/… 【参考方案1】:第一个选择的结果集已经发送回客户端。
从那以后发生了什么并不重要; next 查询将找不到自删除记录的匹配项。
这只是与语句排序有关。以下,没有任何嵌套/显式事务,将产生相同的结果:
SELECT * from tbl_types where ID=2
DELETE from tbl_types where ID=2
虽然这不会返回任何结果:
DELETE from tbl_types where ID=2
SELECT * from tbl_types where ID=2
【讨论】:
以上是关于SQL 嵌套事务的主要内容,如果未能解决你的问题,请参考以下文章