我们有 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
编辑:我也想尽量避免死锁,除非它们真的没有效果,我可以为它们做准备并重新运行查询。