试图找出一个MySQL语句,这是一个常见的查询问题所以我没有使用任何设置索引......所以请耐心等待。 :)
有没有办法合并这两个查询。
SELECT * FROM tableName WHERE ID='123';
if (NUM_ROWS == 0) {
INSERT INTO tableName (ID) VALUES (123)
}
基本上,我想检查某个条目是否存在,如果不存在,我想创建它。想象我可能能够一次击中DB而不是两次。
最终目标是仅在首先不存在行时才创建行。
谢谢!
答案 0 :(得分:2)
如果ID
列是PRIMARY KEY
或UNIQUE
约束,那么只需尝试将其添加IGNORE
,这样就不会收到任何错误消息(只是一个警告):
INSERT IGNORE INTO tableName (ID)
VALUES (123)
如果不是,这将是有效的:
INSERT INTO tableName (ID)
SELECT 123
FROM dual
WHERE NOT EXISTS
( SELECT *
FROM tableName
WHERE ID = 123
)
答案 1 :(得分:1)
您可能正在寻找REPLACE声明
答案 2 :(得分:1)
正如@uzi指出的那样,你可以使用REPLACE
语句。但是,在插入之前删除记录,现在可能就是您想要的。
还有MySQL扩展INSERT ... ON DUPLICATE KEY UPDATE
,但是如果找到记录,你将不得不在update子句中添加一些内容。
修改强> 哦,这两个语句也适用于重复的唯一键。
答案 3 :(得分:0)
在这些情况下,我倾向于使用简单的INSERT IGNORE INTO
。请记住,这可能会产生其他副作用,例如其他转换错误会转换为纯粹的警告。