2014-09-23 19 views
0

我試圖將新用戶如果用戶表中不存在的,我想這個查詢,但收到錯誤:MySQL的:插入其中不存在

INSERT INTO USER (name,email) 
VALUES ('John','[email protected]') 
WHERE NOT EXISTS 
    (SELECT id FROM USER WHERE email = '[email protected]') 

如果不存在如何插入用戶?

錯誤:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where not exists (select id from user where email = '[email protected]')' at line 5 

感謝,

+3

什麼是錯誤? – 2014-09-23 13:12:32

+0

MySQL服務器版本爲正確的語法使用附近'哪裏不存在(從用戶選擇ID,其中電子郵件='[email protected]')' – mwafi 2014-09-23 13:14:30

+0

爲什麼不使用IF語句只執行INSERT語句給定條件?... – ne1410s 2014-09-23 13:15:55

回答

5

使用insert . . . select:所以數據庫保護數據

INSERT INTO USER (name, email) 
    SELECT name, email 
    FROM (SELECT 'John' as name, '[email protected]' as email) t 
    WHERE NOT EXISTS (SELECT 1 FROM USER u WHERE u.email = t.email); 

但更好的方法可能是隻是把唯一索引:

INSERT INTO USER (name, email) 
    SELECT 'John', '[email protected]' 
    WHERE NOT EXISTS 
     (SELECT id FROM USER WHERE email = '[email protected]'); 

我會寫爲

create unique index idx_users_email on user(email); 
5

使用INSERT ... SELECT,而不是INSERT

INSERT INTO USER (name,email) 
SELECT 'John','[email protected]' 
WHERE NOT EXISTS 
    (SELECT id FROM USER WHERE email = '[email protected]') 

您還可以考慮使用MySQL的ON DUPLICATE KEY UPDATE語法擴展。

+0

你的查詢需要有一個'FROM'子句,否則會引發錯誤。 http://www.sqlfiddle.com/#!2/82dea – Omesh 2014-09-23 13:36:37