MySQL在重复密钥更新PK AI上插入

时间:2012-04-16 09:23:27

标签: mysql insert duplicates auto-increment

我有这种结构的测试表:

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值(因此不会进行插入,只会更新)。这是正常行为还是我错过了什么?

1 个答案:

答案 0 :(得分:0)

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

此外:

  • 如果有重复的密钥,更改不属于任何密钥的列的值将无济于事。
  • 通过AUTO_INCREMENT获得的值应该没有意义。如果您担心差距,那么您使用错误的工具来完成工作。