我想在一个项目中使用MySQL事务,但之前没有使用它们,我想我会读到任何潜在的问题。我在http://mysqldatabaseadministration.blogspot.com/2007/04/innodb-performance-optimization.html找到一篇文章,提示死锁很常见,您的应用程序应该能够处理它们。MySQL事务陷阱
在这种情况下,“死锁”是指什么?据我所知,交易不会锁定数据库,因此它不能锁定。我将如何去处理这样的问题。
我还有其他问题需要注意吗?
我想在一个项目中使用MySQL事务,但之前没有使用它们,我想我会读到任何潜在的问题。我在http://mysqldatabaseadministration.blogspot.com/2007/04/innodb-performance-optimization.html找到一篇文章,提示死锁很常见,您的应用程序应该能够处理它们。MySQL事务陷阱
在这种情况下,“死锁”是指什么?据我所知,交易不会锁定数据库,因此它不能锁定。我将如何去处理这样的问题。
我还有其他问题需要注意吗?
事务确实锁定了数据库。如果两个交易正在等待对方,你就会陷入僵局。
交易1:
lock table1;
lock table2;
事务2:
lock table2;
lock table1;
如果现在交易双方做了他们的第一个步骤,他们互相等待。你必须避免这样的序列。
当事务1(写入)资源A和在此期间交易2获取资源B.死锁可能发生
现在想象一下,事务2想要的资源A,但忙碌,因此必须等待,事务尝试获取资源B,并且发现它也很忙。你有一个循环的等待,一个僵局。事务1正在等待事务2持有的资源,事务2正在等待事务1的资源。两个事务都不能继续。这是最简单的例子,链条可以更长。
MySQL的InnoDB检测到死锁并杀死其中一个事务,使其失败。
,你能做些什么来避免此问题是:
谢谢。你怎么知道交易已经回滚?目前,我检查交易中的每个查询是否成功,以便知道是否提交。如果出现回滚,至少其中一个会失败,这似乎是合理的,或者是否有标准的检查方式?在Java中 – wyatt
有一个特定的异常,我可以查询,你的编程语言是什么?我认为你所说的话应该是一个合理的检查方式。 – stivlo