MySQL: ALTER IGNORE TABLE gives “Integrity constraint violation”

后端 未结 3 1913
[愿得一人]
[愿得一人] 2020-11-27 12:45

I\'m trying to remove duplicates from a MySQL table using ALTER IGNORE TABLE + an UNIQUE KEY. The MySQL documentation says:

IGNORE is a MySQL extensio

相关标签:
3条回答
  • 2020-11-27 13:13

    The IGNORE keyword extension to MySQL seems to have a bug in the InnoDB version on some version of MySQL.

    You could always, convert to MyISAM, IGNORE-ADD the index and then convert back to InnoDB

    ALTER TABLE table ENGINE MyISAM;
    ALTER IGNORE TABLE table ADD UNIQUE INDEX dupidx (field);
    ALTER TABLE table ENGINE InnoDB;
    

    Note, if you have Foreign Key constraints this will not work, you will have to remove those first, and add them back later.

    0 讨论(0)
  • 2020-11-27 13:13

    Or try set session old_alter_table=1 (Don't forget to set it back!)

    See: http://mysqlolyk.wordpress.com/2012/02/18/alter-ignore-table-add-index-always-give-errors/

    0 讨论(0)
  • 2020-11-27 13:14

    The problem is that you have duplicate data in the field you're trying to index. You'll need to remove the offending duplicates before you can add a unique index.

    One way is to do the following:

       CREATE TABLE tmp_table LIKE table;
       ALTER IGNORE TABLE tmp_table ADD UNIQUE INDEX dupidx (field);
       INSERT IGNORE INTO tmp_table SELECT * FROM table;
       DROP TABLE table;
       RENAME TABLE tmp_table TO table;
    

    this allows you to insert only the unique data into the table

    0 讨论(0)
提交回复
热议问题