首页 > 解决方案 > MariaDB 不必要的 AUTO_INCREMENT 和 ON DUPLICATE 子句

问题描述

我有一个表,我命名为“srcCodDsc”,它有 3 列:

我还在 locId 上定义了一个唯一索引,以避免 locId 值重复。

现在的问题:

INSERT INTO srcCodDsc (locId,locDsc) VALUES ('012_002','value to set') 
ON DUPLICATE KEY UPDATE locDsc=VALUES(locDsc);

查询正确更新了 locId = '012_002' 行的 locDsc 值,但我发现 AUTO_INCREMENT 下一个值计数器在每次执行查询时递增,即使未插入新行也是如此。

我用命令检查它:

SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA='berna' AND TABLE_NAME='srcCodDsc';

如何将查询转换为条件形式,在检查 locId = '012_002' 的记录是否存在后,在一种情况下插入,在另一种情况下更新,如果 locDsc 已经值得新值什么都不做?

注意:mySql 中的相同查询有效并且不会更新 auto_increment 下一个值。

谢谢

标签: insertmariadbauto-increment

解决方案


为了提高效率,各种INSERT类似的语句会快速获取AUTO_INCREMENT可能需要的值,然后继续进行查询。在您的情况下,不需要 id,因此它被“烧毁”。

我相信这在 MySQL 和 MariaDB 中都是一样的。如果您发现差异,请提供两者的版本号,以及变量的值innodb_autoinc_lock_mode

另请注意:(在 MySQL 8.0 之前)如果您在烧录表中的最后一个id 之间停止并重新启动 MySQL/MariaDB,则该 id 将被重用。(这导致了不同类型的惊喜,因此在 8.0 中发生了变化。)


推荐阅读