MySQL: ALTER IGNORE TABLE이 "Integrity 제약 조건 위반"을 발생시킵니다.
ALTER IGNORE TABLE + UNIQURE KEY를 사용하여 MySQL 테이블에서 중복을 제거하려고 합니다.MySQL 문서에는 다음과 같이 기재되어 있습니다.
IGNORE는 표준 SQL에 대한 MySQL 확장입니다.ALTER TABLE은 새 테이블의 고유 키에 중복이 있거나 strict 모드가 활성화되었을 때 경고가 발생할 경우 어떻게 동작하는지 제어합니다.IGNORE를 지정하지 않으면 복사가 중단되고 중복 키 오류가 발생하면 롤백됩니다.IGNORE를 지정한 경우 고유 키에 중복된 행이 있는 첫 번째 행만 사용됩니다.충돌하는 다른 행은 삭제됩니다.잘못된 값은 허용 가능한 가장 가까운 값으로 잘립니다.
쿼리를 실행하면...
ALTER IGNORE TABLE table ADD UNIQUE INDEX dupidx (field)
오류 #1062 - 키 'dupidx'의 중복 항목 'blabla'가 아직 표시됩니다.
그IGNOREMySQL로 키워드를 확장하면 일부 버전의 MySQL에서 InnoDB 버전에 버그가 있는 것 같습니다.
언제든지 MyISAM으로 변환하고 인덱스를 IGNORE-ADD한 다음 InnoDB로 다시 변환할 수 있습니다.
ALTER TABLE table ENGINE MyISAM;
ALTER IGNORE TABLE table ADD UNIQUE INDEX dupidx (field);
ALTER TABLE table ENGINE InnoDB;
Foreign Key 제약조건이 있는 경우 이 제약조건을 먼저 삭제한 후 나중에 다시 추가해야 합니다.
또는 session old_session_table=1을 설정해 보십시오(반복하는 것을 잊지 마십시오).
참조: http://mysqlolyk.wordpress.com/2012/02/18/alter-ignore-table-add-index-always-give-errors/
문제는 인덱싱하려는 필드에 중복 데이터가 있다는 것입니다.고유한 인덱스를 추가하려면 먼저 문제가 되는 중복 항목을 제거해야 합니다.
한 가지 방법은 다음과 같습니다.
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;
그러면 테이블에 고유한 데이터만 삽입할 수 있습니다.
언급URL : https://stackoverflow.com/questions/8053447/mysql-alter-ignore-table-gives-integrity-constraint-violation
'source' 카테고리의 다른 글
| exclipse - 테이블의 JPA 엔티티, 스키마가 나열되지 않음 (0) | 2023.01.19 |
|---|---|
| java.util.logging을 사용하면 어떨까요? (0) | 2023.01.19 |
| HTML을 포함하는 문자열을 twig 템플릿에 표시하는 방법 (0) | 2023.01.19 |
| org.hsqldb.HsqlException: 사용자에게 권한이 없거나 개체를 찾을 수 없습니다. DATE_FORMAT (0) | 2023.01.19 |
| Node.js Mongoose를 사용하여 문서를 삭제하려면 어떻게 해야 합니까? (0) | 2023.01.19 |