2

我有这种结构的测试表:

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 值(所以没有插入,只有更新)。这是正常行为还是我错过了什么?

4

1 回答 1

0

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

还:

  • 如果存在重复键,则更改不属于任何键的列的值将无济于事。
  • 通过 AUTO_INCREMENT 获得的值应该是没有意义的。如果您担心差距,则说明您使用了错误的工具来完成这项工作。
于 2012-04-16T09:54:55.540 回答