如何在插入查询中检查特定列是否具有特定值,然后更新该行。否则它应该插入一个新行。
这样的事情就是我想要的:
INSERT INTO table (col1, col2, col3) VALUES (val1, val2, val3) UPDATE IF col3 = $number
答案 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列(col1
到col3
)的表格,但REPLACE
只设置其中两列(col1
,col2
),第三列一个col3
将收到指定的默认值,但不保留旧值。
答案 2 :(得分:1)
如果您对该列有唯一索引,请使用此
INSERT INTO table (col1, col2, col3) VALUES (val1, val2, val3)
ON DUPLICATE KEY UPDATE col3 = $number