我遇到的情况只有在记录不存在时才需要插入。通常情况下,我会使用以下条件使用2个查询:
SELECT FROM TABLE ->
IF RECORD NOT FOUND THEN -> INSERT INTO TABLE
ELSE -> DO NOTHING
我觉得我的解决方案并不好。如何只用一个查询就可以实现同样的目的?例如:
SELECT * from user where status='A' AND name='Lewis'
IF RECORD NOT FOUND THEN
INSERT INTO user(status,name) VALUES('F','Lewis');
答案 0 :(得分:0)
你的意思是:
BEGIN
IF NOT EXISTS (SELECT * from user where status='A' AND name='Lewis')
BEGIN
INSERT INTO user (status, name)
VALUES('F','Lewis')
END
END
这适用于SQL Server,也应该可以在MySQL中使用。
编辑:
显然它不在MySQL中工作(只是测试)。但是,您可以使用INSERT IGNORE
:
INSERT IGNORE INTO user2 (status, name)
VALUES('F','Lewis');
请注意,只有拥有唯一键或主键才能使用。
另一种方法是使用相同的唯一键或主键,然后使用:
INSERT IGNORE INTO user2 (status, name)
VALUES('F','Lewis')
ON DUPLICATE KEY UPDATE status=status;
这样可以避免忽略其他错误,并且只会忽略重复键警告。