2013-02-27 126 views
0

我有這個SQL語句創建一個表:MySQL在忽略重複的非主鍵

CREATE TABLE employees (
    id INTEGER NOT NULL AUTO_INCREMENT, 
    name VARCHAR(20), 
    PRIMARY KEY (id) 
); 

我想插入到表中使用類似

INSERT IGNORE INTO employees (name) values ('foo'); 

,但該語句如果在表中已經有一個名字爲'foo'的人不做任何事情。是否有一個聲明忽略了除主鍵或定義爲唯一的字段之外的字段上的重複項?

+1

創建一個唯一的鍵並使用INSERT IGNORE'。 – Kermit 2013-02-27 20:26:47

回答

1
INSERT INTO employees (name) 
SELECT "foo" name FROM (select count(*) c 
         from employees 
         where name = "foo" 
         having c = 0) x; 

對於效率,您應該有一個name索引。我不確定你爲什麼不想讓它成爲一個獨特的索引。

FIDDLE

+0

值得一提的是,在這種情況下應該特別考慮指數? – Sebas 2013-02-27 20:30:56

+0

這不行,修改... – Barmar 2013-02-27 20:32:09

+0

哦對。不存在需要我猜 – Sebas 2013-02-27 20:33:45