我在Python中使用MySQLdb。
我有一个可能成功或失败的更新:
UPDATE table
SET reserved_by = PID
state = "unavailable"
WHERE state = "available"
AND id = REQUESTED_ROW_ID
LIMIT 1;
正如您可能推断的那样,多个进程正在使用数据库,我需要进程能够安全地为自己抓取行,而不会出现因竞争条件导致问题。
我的理论(可能不正确)是只有一个进程能够成功使用此查询(.rowcount = 1) - 其他进程将失败(.rowcount = 0)或获取不同的行(.rowcount = 1 )。
问题是,似乎通过MySQLdb发生的一切都发生在虚拟世界中 - .rowcount reads = 1,但你真的不知道是否真的发生过,直到你执行a .commit()。
我的问题:
答案 0 :(得分:0)
开启autocommit
。
commit
操作只是“确认”已完成的更新。替代方案是rollback
,它“撤消”已经进行的任何更新。