将SELECT和INSERT查询组合成一个...可能吗?
问题描述:
试图找出一个MySQL的声明,这是一种普遍的查询问题,所以我没有使用任何设置索引...所以忍受着我。 :)将SELECT和INSERT查询组合成一个...可能吗?
有没有办法将这两个查询结合起来。
SELECT * FROM tableName WHERE ID='123';
if (NUM_ROWS == 0) {
INSERT INTO tableName (ID) VALUES (123)
}
基本上,我想检查某个条目是否存在,如果它不是我想要创建它。我想我可能能够击中数据库一次而不是两次。
最终目标是仅在不存在第一个时才创建行。
谢谢!
答
如果ID
列是PRIMARY KEY
或有UNIQUE
约束,然后简单地尝试与IGNORE
添加它,这样你就不会得到任何错误消息(仅警告):如果它不是
INSERT IGNORE INTO tableName (ID)
VALUES (123)
“T,这将一般工作:
INSERT INTO tableName (ID)
SELECT 123
FROM dual
WHERE NOT EXISTS
(SELECT *
FROM tableName
WHERE ID = 123
)
答
由于@uzi指出的那样,你可以使用REPLACE
声明。但是,这将删除插入前的记录,现在可能是你想要的。
还有一个MySQL扩展INSERT ... ON DUPLICATE KEY UPDATE
,但是如果找到记录,您将不得不在添加更新子句。
编辑: 哦,而且这两个声明适用于重复的唯一键。
答
我倾向于在那些情况下,使用一个简单的INSERT IGNORE INTO
。请记住,这可能会产生其他副作用,例如其他转换错误转换为单纯的警告。
谢谢!这工作完美。 –