MySQL忽略非主键上的重复项

MySQL忽略非主键上的重复项,mysql,stored-procedures,insert,duplicates,ignore,Mysql,Stored Procedures,Insert,Duplicates,Ignore,我有一个由以下SQL语句创建的表: CREATE TABLE employees ( id INTEGER NOT NULL AUTO_INCREMENT, name VARCHAR(20), PRIMARY KEY (id) ); 我想在表中插入如下内容 INSERT IGNORE INTO employees (name) values ('foo'); 但是,如果表中已经有一个人的名字是“foo”,则该语句将不起作用。除了主键或定义为唯一的字段之外,是否

我有一个由以下SQL语句创建的表:

CREATE TABLE employees (
    id  INTEGER  NOT NULL AUTO_INCREMENT,
    name   VARCHAR(20),
    PRIMARY KEY (id)
);
我想在表中插入如下内容

INSERT IGNORE INTO employees (name) values ('foo');
但是,如果表中已经有一个人的名字是“foo”,则该语句将不起作用。除了主键或定义为唯一的字段之外,是否存在忽略字段上重复项的语句

INSERT INTO employees (name)
SELECT "foo" name FROM (select count(*) c
                        from employees
                        where name = "foo"
                        having c = 0) x;
为了提高效率,您应该在
name
上设置索引。我不知道你为什么不想让它成为一个唯一的索引


创建一个唯一的键并使用
INSERT IGNORE
。值得一提的是,在这种情况下,应该特别考虑索引?修复了此问题,并添加了有关索引效率的说明。