【发布时间】:2012-08-22 03:08:23
【问题描述】:
我们有 2 个脚本/mysql 连接,它们从表中获取行。一旦一个脚本抓取了一些行,其他脚本就不能访问这些行。
到目前为止,我得到的似乎是这样的:
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
START TRANSACTION
SELECT * FROM table WHERE result='new' FOR UPDATE
// Loop over update
UPDATE table SET result='old' WHERE id=...
COMMIT
据我了解,同一个连接可以读取脏数据,但由于行被锁定,其他连接不应该能够读取。这是正确的吗?
还有没有更好的方法来保证每一行在两个脚本都运行时只能是SELECT 一次?
编辑: 哦...引擎是 Innodb
编辑:另外我想尽量避免死锁,除非它们真的没有效果,我可以为它们做准备并重新运行查询。
【问题讨论】:
标签: mysql transactions isolation-level