0

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

像这样的东西是我想要的:

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

3 回答 3

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)
于 2012-07-16T10:00:40.473 回答
2

看一下REPLACE INTO命令(MySQL 文档)。

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

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

编辑

正如@eggyal 提到的那样,这种情况下的行为,当行被替换时,实际上是删除旧行并随后插入新行。当您使用触发器、外键等时,这可能会导致一些问题。

实际上,您也可能会丢失某些列的内容。假设您有一个包含 3 列 ( col1to col3) 的表,但REPLACE只设置了其中的两个 ( col1, col2),第三个col3将接收指定的默认值而不保留旧值。

于 2012-07-16T10:00:52.267 回答
1

如果您在该列上有唯一索引,则使用它

INSERT INTO table (col1, col2, col3) VALUES (val1, val2, val3) 
ON DUPLICATE KEY UPDATE col3 = $number
于 2012-07-16T10:03:23.867 回答