MySQL忽略非主键上的重复项

时间:2013-02-27 20:23:22

标签: 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'的人,则该声明无效。是否有声明忽略除主键或定义为唯一的字段之外的字段上的重复项?

1 个答案:

答案 0 :(得分:1)

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

为了提高效率,您应该在name上设置一个索引。我不确定你为什么不想把它变成一个独特的索引。

FIDDLE