如何在插入查询中检查特定列是否具有特定值,然后更新该行。否则它应该插入一个新行。
像这样的东西是我想要的:
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
在您的上创建一个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)
看一下REPLACE INTO
命令(MySQL 文档)。
REPLACE INTO table (col1, col2, col3) VALUES (val1, val2, val3);
它检查主键和唯一索引,当已经存在匹配条目时,该行被新行替换,否则插入新行。
编辑
正如@eggyal 提到的那样,这种情况下的行为,当行被替换时,实际上是删除旧行并随后插入新行。当您使用触发器、外键等时,这可能会导致一些问题。
实际上,您也可能会丢失某些列的内容。假设您有一个包含 3 列 ( col1
to col3
) 的表,但REPLACE
只设置了其中的两个 ( col1
, col2
),第三个col3
将接收指定的默认值而不保留旧值。
如果您在该列上有唯一索引,则使用它
INSERT INTO table (col1, col2, col3) VALUES (val1, val2, val3)
ON DUPLICATE KEY UPDATE col3 = $number