2012-04-16 105 views
2

插入我的測試表,這種結構:MySQL在重複鍵更新PK AI

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是AI不同的2列。

簡單測試查詢:

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

我每次查詢運行它增加AUTO_INCREMENT值(所以沒有插件由,只更新)。這是正常的行爲還是我錯過了什麼?

+0

'每次運行查詢時,都會增加AUTO_INCREMENT的值(因此不會插入,只會更新)。這是正常行爲嗎?還是我錯過了什麼?「首先,這是什麼意思?你是否實現了你想要的或想要的東西? – 2012-04-16 09:55:20

+0

你想要發生什麼?你想不得不自動遞增鍵嗎?或者你希望它只在主鍵空閒時插入? – Anthony 2012-04-16 10:01:04

+0

'差距'讓我感到擔憂。真正的表格有更多不同的結構 - 'x'附加字段經常改變,PK不是int(記錄數量適中)。所以通過經常更新表的自動增量值最終會超出範圍,並且新插入會發生什麼?所以我問的是這個mysql的正常行爲,當更新被執行時,每個'重複密鑰更新'增加這個值? – Bernard 2012-04-16 13:04:54

回答

0

讓我們來看看從另一個角度主題:MySQL不會重置表的AUTO_INCREMENT值,除非你告訴它(例如,通過ALTER TABLETRUNCATE TABLE查詢)。在你的情況下,它顯然需要使用一個值,以便它可以在插入它之前就可以確定它是重複的。

另外:

  • 如果有重複的鍵,更改列,它是不屬於任何鍵會不由自主的一部分的價值。
  • 通過AUTO_INCREMENT獲得的值應該沒有意義。如果你擔心差距,你正在使用錯誤的工具來完成這項工作。