2014-10-04 59 views
0

我遇到了只有在记录不存在时才需要插入的情况。通常情况下,我将使用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

你的意思是这样的:

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; 

这避免了被忽略其他错误结束了,只有忽略重复键警告。