gpt4 book ai didi

mysql - 如何在避免唯一键出现问题的同时一次更新多行?

转载 作者:行者123 更新时间:2023-11-30 23:30:48 25 4
gpt4 key购买 nike

我有以下(简化的)数据库表,代表锦标赛中的球队。每个团队都属于一个池,并且在该池中具有排名(第一、第二等)。

CREATE TABLE `team` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`pool_id` bigint(20) NOT NULL,
`rank` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `pool_id_rank_idx` (`pool_id`,`rank`),
)

唯一键就在那里,因为一个池中不能有两个排名相同的团队。

当团队互相比赛时,他们的排名会发生变化,我需要更新它们。我希望能够在一个查询中更新所有排名,但我想不出一种有时不会导致“重复输入”错误的方法。以下是导致此问题的情况示例:

两支队伍(A 和 B)分别在一个池中排名 1 和 2。他们互相比赛,B 打败了 A。现在我需要调换他们的排名。我正在使用的查询是这样的:

UPDATE team 
SET rank = CASE id WHEN idA THEN 2 WHEN idB THEN 1 END
WHERE id IN (idA,idB);

idA和idB是对应teams的id

这看起来应该可以很好地工作,但是我得到了这个错误:

ERROR 1062 (23000): Duplicate entry '1-2' for key 'pool_id_rank_idx'

我认为发生这种情况是因为 MySQL 在每行更改后检查唯一键。

是否有任何方法可以将唯一 key 检查推迟到所有更改完成之后?

最佳答案

Rank是动态值,为什么要加到unique key上?或者您的意思是不可能有两个相似的排名值用于一个池?

当你更新数据时,有两个相似的 pool_id,rank 对出现 - 这就是原因。

删除唯一键:

ALTER TABLE team DROP INDEX pool_id_rank_idx

关于mysql - 如何在避免唯一键出现问题的同时一次更新多行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10808978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com