"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > MySQL에서 외래 키 제약 조건을 일시적으로 비활성화하는 방법은 무엇입니까?

MySQL에서 외래 키 제약 조건을 일시적으로 비활성화하는 방법은 무엇입니까?

2024년 11월 18일에 게시됨
검색:737

How to Temporarily Disable Foreign Key Constraints in MySQL?

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