【发布时间】:2011-07-13 07:57:13
【问题描述】:
我有一个像这样工作的事务性应用程序:
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 事务中断吗?我有一个添加某些内容的函数,然后是另一个删除它的函数,但是当我遇到死锁时,我发现数据完全不同步,就像忽略了事务一样。
这一定会发生还是有其他问题?
谢谢,多米尼克
【问题讨论】:
标签: php mysql transactions acid database-concurrency