开发者社区> 问答> 正文

在重复键+自动增加问题mysql?mysql

我有这样的表结构

在此处输入图片说明

当我向表中插入行时,我正在使用以下查询:

INSERT INTO table_blah ( material_item, ... hidden ) VALUES ( data, ... data ) ON DUPLICATE KEY UPDATE id = id, material_item = data, ... hidden = data;

当我第一次插入数据而不触发ON DUPLICATE KEYid时,罚款会逐渐增加:

在此处输入图片说明

但是当ON DUPLICATE KEY触发器和我插入新行时,id对我来说很奇怪:

在此处输入图片说明

auto increment即使触发了,我如何正确保持增量ON DUPLICATE KEY呢?

展开
收起
保持可爱mmm 2020-05-17 12:35:03 490 0
1 条回答
写回答
取消 提交回答
  • 这种行为被记录在案(括号内段):

    如果指定ON DUPLICATE KEY UPDATE,并且插入一行会导致UNIQUE索引或PRIMARY KEY中的值重复,则MySQL将对旧行执行UPDATE。例如,如果将列a声明为UNIQUE并包含值1,则以下两个语句具有相似的作用:

    INSERT INTO table (a,b,c) VALUES (1,2,3)   ON DUPLICATE KEY UPDATE c=c+1;
    
    UPDATE table SET c=c+1 WHERE a=1;
    

    (对于a是自动递增列的InnoDB表,其效果是不同的。对于自动递增列,INSERT语句会增加自动递增值,但UPDATE不会。)

    这是一个简单的解释。MySQL尝试首先执行插入操作。这是ID自动递增的时间。一旦增加,它将保持不变。然后检测到重复项并进行更新。但是价值被错过了。

    您不应该依赖于auto_increment没有差距。如果这是必需的,则更新和插入的开销会更大。本质上,您需要在整个表上加一个锁,并通常使用触发器对需要重新编号的所有内容进行重新编号。更好的解决方案是计算输出的增量值。来源:stack overflow

    2020-05-17 12:38:16
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
One Box: 解读事务与分析一体化数据库 HybridDB for MySQL 立即下载
One Box:解读事务与分析一体化数据库HybridDB for MySQL 立即下载
如何支撑HTAP场景-HybridDB for MySQL系统架构和技术演进 立即下载

相关镜像