insert - MariaDB 不必要的 AUTO_INCREMENT 和 ON DUPLICATE 子句
问题描述
我有一个表,我命名为“srcCodDsc”,它有 3 列:
- ID : INT PRIMARY KEY 和 AUTO_INCREMENT
- locId : VARCHAR
- locDsc : VARCHAR
我还在 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 下一个值。
谢谢
解决方案
为了提高效率,各种INSERT
类似的语句会快速获取AUTO_INCREMENT
它可能需要的值,然后继续进行查询。在您的情况下,不需要 id,因此它被“烧毁”。
我相信这在 MySQL 和 MariaDB 中都是一样的。如果您发现差异,请提供两者的版本号,以及变量的值innodb_autoinc_lock_mode
。
另请注意:(在 MySQL 8.0 之前)如果您在烧录表中的最后一个id 之间停止并重新启动 MySQL/MariaDB,则该 id 将被重用。(这导致了不同类型的惊喜,因此在 8.0 中发生了变化。)
推荐阅读
- wso2 - 有没有芭蕾舞演员的框架
- entity-framework-core - 通过 EF Core 中的差异更新整数(或数字)
- powerbi - Power BI:将流数据集中的图表添加到 Power BI 桌面报表
- django - 在过滤的查询集上使用 Django 窗口函数
- python-3.x - 用 MRJob 和 Pymorphy2 对单词进行形态分析
- python - 我应该将目标类转换为浮点数还是整数?
- c++ - 使用 Qt 程序构建 crypto++ 时出现链接器错误
- android - 无法在 Android 上使用 JDBC 连接到 Oracle 11g 数据库
- sql - 优化复杂存储过程
- angular - Angular - 如何制作通用添加按钮以在所有子组件中使用?