【问题标题】:MySQL INSERT if a identical entire row doesn't exist如果不存在相同的整行,则 MySQL INSERT
【发布时间】:2012-06-13 19:58:09
【问题描述】:

我有一个包含 10 列的表,我必须从 CSV 文件中添加很多很多行。当然,我不能添加两个相同的行,所以如果整行确实存在,我需要一个忽略该命令的 SQL 语句。仅当所有字段都相同时,才必须忽略 INSERT。两行可能具有相同的 field1field2,但并非所有字段都相同。

我尝试了INSERT IGNORE,但它不起作用。没有将列设置为UNIQUE,因为只有当整行相同时,INSERT 才必须被忽略。

您对此有什么解决方案?谢谢!

【问题讨论】:

    标签: mysql insert row unique


    【解决方案1】:

    所有列上创建组合索引,然后根据您的需要INSERT IGNOREREPLACE INTO

    来自docs

    如果您使用 IGNORE 关键字,则执行 INSERT 语句时发生的错误将被视为警告。例如,如果没有 IGNORE,与表中现有 UNIQUE 索引 或 PRIMARY KEY 值重复的行会导致重复键错误并中止语句。使用 IGNORE,行仍然没有插入,但不会发出错误。

    【讨论】:

    • 我在所有使用 INSERT IGNORE 的列中添加了一个索引,它不起作用
    • 是的,但是两个字段可以具有相同的值。仅当整行已经存在时才允许 INSERT - 新行的每个字段都与现有行的每个字段相同
    • 如果我设置了 UNIQUE INDEX,我不能在两行中有相同的值。
    • 不是每一列上的唯一索引,而是所有列一起上的组合唯一索引,这符合您的要求
    • 好吧,我在尝试一次将 INDEX 应用于所有内容时得到了这个:#1071 - 指定的密钥太长;最大密钥长度为 1000 字节
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 2012-04-20
    • 2017-04-14
    • 1970-01-01
    • 2012-07-07
    • 1970-01-01
    相关资源
    最近更新 更多