我有像这样工作的事务应用程序:
try {
$db->begin();
increaseNumber();
$db->commit();
} catch(Exception $e) {
$db->rollback();
}
然后在 increaseNumber() 里面我会有一个像这样的查询,这是唯一适用于这个表的函数:
// I use FOR UPDATE so that nobody else can read this table until its been updated
$result = $db->select("SELECT item1
FROM units
WHERE id = '{$id}'
FOR UPDATE");
$result = $db->update("UPDATE units SET item1 = item1 + 1
WHERE id = '{$id}'");
一切都包含在事务中,但最近我一直在处理一些非常慢的查询,并且我的应用程序中有很多并发性,所以我无法确保查询是以特定顺序运行的。
死锁会导致 ACID 事务中断吗?我有一个添加某些内容的函数,然后是另一个删除它的函数,但是当我遇到死锁时,我发现数据完全不同步,就像忽略了事务一样。
这一定会发生还是有其他问题?
谢谢,多米尼克