2013-02-27 127 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