gpt4 book ai didi

mysql - ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id) 不增加 autoindex

转载 作者:太空宇宙 更新时间:2023-11-03 11:42:56 25 4
gpt4 key购买 nike

我正在运行一个 SQL 查询,看起来有点像这样

INSERT INTO people (Name, Role)
VALUES('{$Name}', '{$Occupation')
ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id)

'people' 表有一个代理 ID 键作为主键,由 MySQL 的 Autoindex 设置。

“名称”和“角色”组合在一起作为复合唯一键。

问题是,当我运行此查询并命中具有相同名称和角色的人并获取他们各自的 ID 时,自动索引仍然增加。

是否可以轻松避免这种情况,或者我是否需要运行 2 个单独的查询来检查是否已经存在然后插入?

最佳答案

首先,如果自动增量增加,您不必担心。不可否认,它在美学上是“丑陋的”,但序列中的间隙应该无关紧要。并且,由于其他原因可能会出现差距。

但是,如果这很重要,您可以通过检查查询来降低它发生的可能性:

INSERT INTO people (Name, Role)
SELECT name, role
FROM (SELECT '{$Name}' as name, '{$Occupation}' as role) x
WHERE NOT EXISTS (SELECT 1 FROM people p WHERE p.name = x.name)
ON DUPLICATE KEY UPDATE name = VALUES(name); -- no op;

您仍然可以获得可能出现间隙的竞争条件,但这会降低这种可能性。

关于mysql - ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id) 不增加 autoindex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40516110/

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