gpt4 book ai didi

mysql - 防止 MySQL 重复插入时自动递增

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

使用 MySQL 5.1.49,我正在尝试实现一个标记系统我遇到的问题是一个包含两列的表:id(autoincrement)tag(unique varchar) (InnoDB)

当使用查询时,INSERT IGNORE INTO tablename SET tag="whatever",即使插入被忽略,自动增量 id 值也会增加。

通常这不会是个问题,但我预计会有很多可能的尝试为这个特定的表插入重复项,这意味着我的新行的 id 字段的下一个值将会跳跃太多了。

例如,我最终会得到一个包含 3 行但 id 错误的表格

1   | test
8 | testtext
678 | testtextt

此外,如果我不执行 INSERT IGNORE 而只是执行常规 INSERT INTO 并处理错误,自动增量字段仍会增加,因此下一个真正的插入是仍然是错误的自动增量。

如果有 INSERT 重复行尝试,有没有办法停止自动递增?

据我所知,对于 MySQL 4.1,这个值不会增加,但我最后要做的是要么提前做很多 SELECT 语句来检查标签是否存在,或者更糟的是,降级我的 MySQL 版本。

最佳答案

您可以将 INSERT 修改为如下所示:

INSERT INTO tablename (tag)
SELECT $tag
FROM tablename
WHERE NOT EXISTS(
SELECT tag
FROM tablename
WHERE tag = $tag
)
LIMIT 1

$tag 是您要添加的标签(正确引用或当然作为占位符),如果它不存在的话。如果标签已经存在,这种方法甚至不会触发 INSERT(以及随后的自动增量浪费)。您可能会想出比这更好的 SQL,但上面应该可以解决问题。

如果您的表被正确索引,那么用于检查存在性的额外 SELECT 将很快并且数据库将不得不执行该检查。

不过,这种方法不适用于第一个标记。您可以为您的标签表添加一个您认为最终会被使用的标签,或者您可以单独检查一个空表。

关于mysql - 防止 MySQL 重复插入时自动递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14636041/

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