如何在插入查詢時檢查特定列是否具有特定值,然後更新該行。否則,它應該插入一個新的行。如果其中一個值存在,則更新,否則插入
出頭喜歡這個就是我想要的:
INSERT INTO table (col1, col2, col3) VALUES (val1, val2, val3) UPDATE IF col3 = $number
如何在插入查詢時檢查特定列是否具有特定值,然後更新該行。否則,它應該插入一個新的行。如果其中一個值存在,則更新,否則插入
出頭喜歡這個就是我想要的:
INSERT INTO table (col1, col2, col3) VALUES (val1, val2, val3) UPDATE IF col3 = $number
建立在你的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)
看一看的REPLACE INTO
命令(MySQL docu)。
REPLACE INTO table (col1, col2, col3) VALUES (val1, val2, val3);
它檢查主鍵和唯一索引,當存在匹配的條目時,該行被替換爲新的,否則插入新行。
編輯
正如@eggyal提到的情況下,當行被替換此行爲,實際上是新行的舊行和插入的缺失之後。這可能會導致一些問題,當你使用觸發器,外鍵或類似的。
其實你也可能會丟失一些列的內容。假設你有一個3列表(col1
到col3
),但REPLACE
只是其中兩個(col1
,col2
),第三個col3
將收到指定的默認值,並不保留舊值。
如果您在該列具有唯一索引,然後使用這個
INSERT INTO table (col1, col2, col3) VALUES (val1, val2, val3)
ON DUPLICATE KEY UPDATE col3 = $number
我試過了,不能讓它的工作:/ – 2012-07-16 10:01:15
@Oskwish:更具體地說,哪裏出了問題,當你試過嗎? – eggyal 2012-07-16 10:06:20
沒關係,工作!忘記設置col3爲唯一。謝謝! :) – 2012-07-16 10:08:58