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 キーは AI である PK とは異なる 2 つの列に設定されています。

簡単なテスト クエリ:

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 に答える