2014-07-08 53 views
1

我是mysql的新手。請幫忙。 我有一個這樣的人。唯一的主鍵是id如果一個密鑰已經存在,請不要插入記錄

id name age sex 

1. John 16 M 

2. Peter 18 K 

我想寫一些sql來插入一些行給人。但是,如果表中已存在 的名稱。我不插入新行。例如,如果我插入名稱爲John和 Peter的行。我不插入行。 我有一個變量名稱var_name;

我已經搜索了很長時間的網絡。 我用下面的SQL由Web

INSERT into People(name) values(var_name) where not exists(SELECT name from People 
where name = var_name) 

但SQL語法錯誤出來建議。爲何會發生這種情況。是否有任何快速的方法來達到我的目標。

+0

的http://stackoverflow.com/questions/3164505/mysql-insert-record-if-not-exists-in-table – user3741598

+0

重複沒有關係你的問題,但我有兩個意見。一個是在現實生活中,更多的人可以擁有相同的名字。另一個是存儲某人的年齡是有限的,因爲它隨着時間的推移而變化。 –

回答

0

如果您對名稱的唯一約束,我相信你可以使用:

INSERT IGNORE People(name) VALUES (var_name); 
+0

你的意思是我需要改變字段'name'在我的數據庫表中唯一嗎? – user1386463

+0

@ user1386463那麼,如果你不想重複名稱值,那肯定是一個好的開始。 – Igor

6

要做到這一點,最好的方法是創建名稱的唯一索引:

create unique idx_people_name on people(name) 

然後,當你插入,使用on duplicate key update

INSERT into People(name) 
    values(var_name) 
    on duplicate key update name = values(name); 

update一塊確實沒什麼克 - 這是一個「禁用」。但是,這將邏輯放在數據庫中,並強制名稱必須是唯一的。

爲了您的查詢能夠正常工作,您需要insert . . . select。該values條款不採取where聲明:

INSERT into People(name) 
    select var_name 
    from dual 
    where not exists(SELECT name from People where name = var_name); 
+0

第二種方法。我想問一下,我是否需要將字段「name」更改爲鍵? – user1386463

+0

@ user1386463。 。 。沒有必要爲列設置特殊名稱。而且,你不想命名一列'key',因爲這是MySQL中的一個保留字。 –

+0

非常感謝。我瞭解前兩種方法。對於第三種方法。我使用下面的查詢插入人(姓名)選擇('彼得')不存在的地方(選擇姓名 from People where name ='Peter')但是會出現sql錯誤。 – user1386463

相關問題