MySQL의 외래 키 제약 조건 임시 비활성화
MySQL에서 외래 키 제약 조건은 참조 무결성을 강화하여 관련 테이블 간의 데이터 일관성을 보장합니다. 그러나 모델 삭제 중과 같이 이러한 제약 조건을 일시적으로 비활성화해야 하는 시나리오가 있습니다.
상호 외래 키 관계가 있는 다음 Django 모델을 고려하세요.
class Item(models.Model): style = models.ForeignKey('Style', on_delete=models.CASCADE) class Style(models.Model): item = models.ForeignKey('Item', on_delete=models.CASCADE)
두 모델의 인스턴스를 순차적으로 삭제하려고 하면 다음 오류가 발생할 수 있습니다.
cursor.execute("DELETE FROM myapp_item WHERE n = %s", n) transaction.commit_unless_managed() # foreign key constraint fails here cursor.execute("DELETE FROM myapp_style WHERE n = %s", n) transaction.commit_unless_managed()
이 외래 키 제약 조건을 우회하려면 다음 방법 중 하나를 사용하여 일시적으로 비활성화할 수 있습니다.
1. DISABLE KEYS:
ALTER TABLE myapp_item DISABLE KEYS;
이 명령은 테이블이 다시 열리거나 닫히면 제약 조건을 다시 활성화합니다.
2. SET FOREIGN_KEY_CHECKS:
SET FOREIGN_KEY_CHECKS = 0; # Disable foreign key checks
삭제 작업 후 제약 조건을 다시 활성화해야 한다는 점을 기억하세요:
SET FOREIGN_KEY_CHECKS = 1; # Re-enable foreign key checks
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3