【问题标题】:Prevent MySQL Duplicate Insert防止 MySQL 重复插入
【发布时间】:2012-06-27 21:39:47
【问题描述】:

我有一个带有自动递增键的 mysql 表。如果表不包含我要插入的行,我需要一种仅插入该表的方法。 INSERT IGNORE 和 INSERT ON DUPLICATE KEY UPDATE 将不起作用,因为自动递增的键将导致行始终不同。只有在没有重复行的情况下才能插入以下行的另一种方法是什么?谢谢。

INSERT INTO TableName (column1, column2, column3) VALUES ("value1", "value2", "value3");

【问题讨论】:

    标签: mysql


    【解决方案1】:

    对需要唯一的列或列组合设置UNIQUE 约束。

    例如:

    ALTER TABLE `TableName`
    ADD UNIQUE `constrain_me` (`column1`, `column2`);
    

    如果您想忽略重复插入可能产生的任何错误,请使用INSERT IGNORE,尽管您可能希望发现此错误而不是将其隐藏在地毯下。

    【讨论】:

    • 我也需要它,所以 column1 和 column2 是唯一的。如果 column1 不同但 column 2 相同,则我插入,但如果 column1 和 column2 相同,我不插入。
    • 这就是组合键的作用。您可以指定多个列名来创建一个不允许相同组合 值的约束。试试看。
    【解决方案2】:

    您可以在不想重复的字段上创建唯一索引。

    CREATE UNIQUE INDEX MyIndex ON column1
    

    这样,如果添加了重复值,查询就会出错。还值得注意的是,此方法确实允许添加 NULL 值(即具有 NULL column1 值的两行不会被视为重复)

    【讨论】:

      猜你喜欢
      • 2019-03-21
      • 2013-03-23
      • 1970-01-01
      • 2015-08-07
      • 2011-08-20
      • 1970-01-01
      • 2016-02-19
      • 2012-08-30
      相关资源
      最近更新 更多