如果其中一个值存在则更新,否则插入

时间:2012-07-16 09:55:21

标签: mysql if-statement

如何在插入查询中检查特定列是否具有特定值,然后更新该行。否则它应该插入一个新行。

这样的事情就是我想要的:

INSERT INTO table (col1, col2, col3) VALUES (val1, val2, val3) UPDATE IF col3 = $number

3 个答案:

答案 0 :(得分:2)

UNIQUE上创建col3密钥:

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)

答案 1 :(得分:2)

查看REPLACE INTO命令(MySQL docu)。

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

它检查主键和唯一索引,当存在匹配的条目时,该行将替换为新行,否则将插入新行。

修改

正如@eggyal所提到的,在这种情况下,当行被替换时,实际上是删除旧行并在之后插入新行。当您使用触发器,外键或类似物时,这可能会导致一些问题。

实际上你也可能会忽略某些列的内容。假设您有一个包含3列(col1col3)的表格,但REPLACE只设置其中两列(col1col2),第三列一个col3将收到指定的默认值,但不保留旧值。

答案 2 :(得分:1)

如果您对该列有唯一索引,请使用此

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