2012-07-16 87 views

回答

2

建立在你的col3一個UNIQUE鍵:

ALTER TABLE `table` ADD UNIQUE KEY (col3) 

然後使用INSERT ... ON DUPLICATE KEY UPDATE

INSERT INTO `table` (col1, col2, col3) VALUES (val1, val2, val3) 
ON DUPLICATE KEY UPDATE col1 = VALUES(col1), col2 = VALUES(col2) 
+0

我試過了,不能讓它的工作:/ – 2012-07-16 10:01:15

+0

@Oskwish:更具體地說,哪裏出了問題,當你試過嗎? – eggyal 2012-07-16 10:06:20

+0

沒關係,工作!忘記設置col3爲唯一。謝謝! :) – 2012-07-16 10:08:58

2

看一看的REPLACE INTO命令(MySQL docu)。

REPLACE INTO table (col1, col2, col3) VALUES (val1, val2, val3); 

它檢查主鍵和唯一索引,當存在匹配的條目時,該行被替換爲新的,否則插入新行。

編輯

正如@eggyal提到的情況下,當行被替換此行爲,實際上是新行的舊行和插入的缺失之後。這可能會導致一些問題,當你使用觸發器,外鍵或類似的。

其實你也可能會丟失一些列的內容。假設你有一個3列表(col1col3),但REPLACE只是其中兩個(col1,col2),第三個col3將收到指定的默認值,並不保留舊值。

+0

謝謝!很棒! :)雖然不是更換成性能問題? – 2012-07-16 10:04:55

+1

'REPLACE'不會更新記錄,它會刪除現有記錄並插入新記錄。細微的差異,但值得注意的是,某些列留在其默認值或觸發器可能導致意外結果的位置。 – eggyal 2012-07-16 10:05:25

+0

@eggyal更新了答案以反映這一點。 – Sirko 2012-07-16 10:10:10

1

如果您在該列具有唯一索引,然後使用這個

INSERT INTO table (col1, col2, col3) VALUES (val1, val2, val3) 
ON DUPLICATE KEY UPDATE col3 = $number 
相關問題