Kyl*_*est 27 sql-server transactions crud
我一直在读一些devs/dbas建议在所有数据库调用中使用事务,甚至是只读调用.虽然我理解在事务中插入/更新在事务中读取的好处是什么?
Gre*_*reg 30
因此,您可以获得数据库的一致视图.想象一下,你有两个相互链接的表,但出于某种原因,你在pseuodocode中选择了2个:
myRows = query(SELECT * FROM A)
moreRows = query(SELECT * FROM B WHERE a_id IN myRows[id])
Run Code Online (Sandbox Code Playgroud)
如果在两个查询之间有人更改B以删除某些行,那么您将遇到问题.
与 RoBorg 所说的类似,您可以使用事务执行 SELECTS 以防止在语句之间读取幻象数据。但需要注意的是,SQL Server 中的默认事务隔离级别是 READ COMMITTED,它只会防止脏读;为了防止幻象数据,您必须至少使用 REPEATABLE READ。“仅在必要时使用此选项。”
http://msdn.microsoft.com/en-us/library/ms173763.aspx