同时更新一行

Updating a row at the same time

假设我有一个 table,其中有两列,其中有来自两个不同团队的积分登记表,如下所示:

TABLE:

table有两支球队在一段时间内完成一关获得的积分关系。

两支球队可以在他们想要的时候打一场比赛,并在比赛结束时更新他们的分数。所以他们有可能同时更新自己的点列。例如,A 队更新 first_team_points,B 队更新 second_team_points.

我知道InnoDB有一个行级锁,所以我想在那种情况下,这两个更新将按顺序实现。

我错了吗?我需要配置什么吗?第二次更新请求会不会死锁?

提前致谢!

请提供代码以供批评。同时,一般来说...

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 秒是默认等待时间;很难达到。)