同时更新一行
Updating a row at the same time
假设我有一个 table,其中有两列,其中有来自两个不同团队的积分登记表,如下所示:
TABLE:
- first_team
- second_team
- first_team_分
- second_team_分
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 秒是默认等待时间;很难达到。)
假设我有一个 table,其中有两列,其中有来自两个不同团队的积分登记表,如下所示:
TABLE:
- first_team
- second_team
- first_team_分
- second_team_分
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 秒是默认等待时间;很难达到。)