외래 키 관계가 이미 해당 행에 설정되어있는 경우 MySQL 테이블에서 중복 행을 삭제할 수 있습니까?
복제본을 어떻게 든 병합 한 다음 외래 키를 새 값으로 업데이트 할 수 있습니까?MySQL 테이블에서 중복 행을 삭제하지만 외래 키 관계가 존재합니까?
답변
외래 키는 다음 테이블 customers
와 테이블 orders
및 ALTER TABLE orders ADD FOREIGN KEY customer_id REFERENCES customers (id) ON DELETE CASCADE
같은 외래 키가있는 경우 또한, 예를 들어, 종속 행을 삭제합니다 중복 행을 삭제 ON DELETE CASCADE
, 경우, 고객을 삭제하면 삭제됩니다 그 고객의 주문. 마찬가지로 외래 키가 ON DELETE SET NULL
인 경우 주문은 삭제되지 않지만 해당 customer_id
값은 NULL로 설정됩니다.
원하는 동작이 아니면 외래 키 열을 변경하여 유지하려는 행을 참조하도록 외래 키 충돌을 해결하는 쿼리를 작성하십시오 (즉, 비 중복 고객을 참조하도록 모든 주문을 업데이트하십시오), 불쾌한 행을 삭제하십시오.
또 다른 대안은 외래 키 검사를 일시적으로 사용하지 않도록 설정하는 것이지만 일치하지 않는 데이터베이스가 남게되므로 권장하지 않습니다.
ON DELETE SET NULL을 사용하여 복제본에 연결된 외부 키 열을 모두 NULL로 설정 한 다음 스크립트에서 직접 위의 ID로 업데이트 할 수 있습니까? – chustar
"바로 위에"올바른 SQL 구문이 아닙니다. SQL 데이터베이스의 레코드는 데이터 테이블에서 그 이전 또는 이후에 있었던 것을 알지 못합니다. "before"와 "after"는 연산자에 의해 부과됩니다 ('sort asc'와'sort desc'의 차이로 생각하십시오). –
임시 테이블을 사용하여 삭제하려는 행과 유지하려는 해당 행 사이의 관계를 저장할 수 있습니다. CREATE TABLE customer_duplicates (duplicate_id, original_id);와 FK를 중복 및 원래 고객에게 제공합니다. 어떤 고객을 유지할 것인지, 어떤 고객을 복제 할 것인지 결정하고 이에 따라 복제 테이블을 채우십시오. 그런 다음 주문 테이블을 업데이트하여 중복 고객을 참조하는 모든 주문이 이제 원래 고객을 참조하도록합니다. 마지막으로 중복 고객을 제거하고 중복 테이블을 삭제하십시오. – tdammers
- 1. 테이블에서 중복 행을 삭제하십시오.
- 2. MySQL 외래 키 문제
- 3. 테이블에서 행을 삭제하지만 주어진 숫자를 유지
- 4. Mysql 외래 키 딜레마
- 5. mysql 중복 중복 키 업데이트
- 6. ActiveRecord :: 관계가 외래 키 이외의 조건으로 조인합니다.
- 7. mysql 삭제 및 외래 키 제약
- 8. 외래 키 문제 - mysql
- 9. MySQL - 고유 외래 키
- 10. MySQL 외래 키 질문
- 11. MySQL 일부 외래 키 제거
- 12. Mysql 중복 키/삭제
- 13. 외래 키 및 MySQL 오류
- 14. 테이블 외래 키에 대한 MySQL 외래 키
- 15. 외래 키 - 일시적으로 우회?
- 16. 전체 테이블을위한 mysql 외래 키
- 17. MySQL 외래 키 : 내가 설정해야합니까?
- 18. 기존 데이터의 MySQL 외래 키
- 19. MySQL Workbench의 외래 키 처리
- 20. 외래 키 생성에서의 MySQL 구문
- 21. 테이블에서 행을 찾으십시오. regexp - mysql
- 22. MySQL 쿼리에서 중복 행을 만들었습니다.
- 23. mysql 외래 키 엔트리를위한 복수 키
- 24. 동일한 테이블에서 중복 행을 삭제하는 SQL 쿼리?
- 25. mysql의 테이블에서 중복 행을 삭제하는 방법
- 26. MySQL : 두 부모를 참조하는 외래 키
- 27. MySQL : 키 2의 중복 항목
- 28. mySQL 가져 오기/중복 키
- 29. PHP에서 MySQL 외래 키 제약 조건을 무시하십시오.
- 30. [MySQL] : 두 개의 종속 테이블에서 행을 삭제
기본 키를 제외하고 * 중복되는 행입니까? – egrunin
네, 테이블에서 제거 할 기본 키와 다른 하나의 컬럼을 제외하고는 그렇습니다. – chustar