在找不到特定记录时插入

时间:2014-10-04 09:58:37

标签: mysql sql

我遇到的情况只有在记录不存在时才需要插入。通常情况下,我会使用以下条件使用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');

1 个答案:

答案 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;

这样可以避免忽略其他错误,并且只会忽略重复键警告。