【问题标题】:MySQL insert on duplicate key update PK AIMySQL 插入重复键更新 PK AI
【发布时间】:2023-03-19 07:35:01
【问题描述】:

我有这种结构的测试表:

CREATE TABLE IF NOT EXISTS `test` (
  `id_pc` int(11) NOT NULL AUTO_INCREMENT,
  `id_vendor` int(11) NOT NULL,
  `id_product` int(11) NOT NULL,
  `test` int(11) NOT NULL,
  PRIMARY KEY (`id_pc`),
  UNIQUE KEY `id_vendor` (`id_vendor`,`id_product`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

如您所见,UQ 密钥设置在与 PK 不同的 2 列上,即 AI。

简单的测试查询:

INSERT INTO test(id_vendor, id_product, test) 
VALUES (1,1,1) ON DUPLICATE KEY UPDATE test = 1;

每次我运行查询时,它都会增加 AUTO_INCREMENT 值(因此不进行插入,只进行更新)。这是正常行为还是我错过了什么?

【问题讨论】:

  • Every time I run query it increments AUTO_INCREMENT value (so no insert is made, only update). Is this normal behavior or am I missing something? 首先你是什么意思?你正在实现你想要的还是想要别的东西?
  • 你想要发生什么?你想要自动增加键吗?还是您希望它仅在主键空闲时插入?
  • “差距”是我担心的。真实表有更多不同的结构 - 'x' 附加字段经常更改并且 PK 不是 int (记录数适中)。所以通过经常更新表的自增值最终会超出范围,而新插入的比会发生什么?那么我要问的是mysql的这种正常行为是在执行更新时在每个“重复键更新”上增加该值?

标签: mysql insert duplicates auto-increment


【解决方案1】:

让我们从另一个角度来看这个主题:MySQL 不会重置表的 AUTO_INCREMENT 值,除非你告诉它(例如,通过ALTER TABLETRUNCATE TABLE 查询)。在您的情况下,它显然需要使用一个值,以便它可以在确定它是重复之前组成插入。

还有:

  • 如果存在重复键,则更改不属于任何键的列的值将无济于事。
  • 通过 AUTO_INCREMENT 获得的值应该是没有意义的。如果您担心差距,说明您使用的工具有误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多