【问题标题】:MySQL ignoring duplicates on non-primary keyMySQL忽略非主键上的重复项
【发布时间】:2013-02-27 20:23:21
【问题描述】:

我有一个由这个 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 IGNORE

标签: mysql stored-procedures insert duplicates


【解决方案1】:
INSERT INTO employees (name)
SELECT "foo" name FROM (select count(*) c
                        from employees
                        where name = "foo"
                        having c = 0) x;

为了提高效率,您应该在name 上有一个索引。我不确定您为什么不想将其设为唯一索引。

FIDDLE

【讨论】:

  • 是否值得一提在这种情况下应特别考虑索引?
  • 已修复,并添加了关于索引以提高效率的说明。
猜你喜欢
  • 2021-02-25
  • 2012-09-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-15
  • 1970-01-01
  • 2016-04-16
  • 2012-10-05
  • 2015-10-15
相关资源
最近更新 更多