同时更新一行

时间:2018-12-08 08:28:55

标签: mysql innodb deadlock

想象一下,我有一个包含两列的表,该表具有来自两个不同团队的点寄存器,如下所示:

表格:

  • first_team
  • second_team
  • first_team_points
  • second_team_points

该表列出了两支球队的关系以及他们在一段时间内完成一个关卡时获得的积分。

两个团队可以在需要时发挥作用,并在完成时更新积分。因此,他们有可能同时更新自己的点列。就像,A团队更新first_team_points,B团队更新second_team_points。

我知道InnoDB具有行级锁定,因此我认为在这种情况下,两个更新将按顺序执行。

我错了吗?我需要配置一些东西吗?第二个更新请求会导致死锁吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

请提供评论代码。同时,总的来说...

BEGIN;   -- start the transaction
SELECT ... FOR UPDATE;  -- if you need to look at something before updating
...
INSERT/UPDATE/etc   -- make whatever changes
COMMIT;

有几个问题:

  • 您想要数据完整性;交易有很大帮助。
  • 您要避免出现死锁-如果没有更多细节,我不能保证会防止所有死锁。如果遇到僵局,请准备好重新执行事务。
  • 一个连接可能会收到“ lock_wait_timeout”。认为这是一个僵局,可以通过让其中一个竞争者等待解决。但是,如果另一个连接花费的时间太长,则可能会超时。通常可以通过加快运行速度来避免这种情况。 (默认等待时间为50秒;很少会碰到。)