안녕하세요! 오늘은 외래 키 활성화/비활성화에 대해서 알아갈려고 합니다. MySQL, MariaDB는 관계형 데이터베이스 관리 시스템(RDBMS)이며, 외래 키 제약 조건을 가질 수 있는 테이블을 지원합니다. 데이터 무결성을 유지하기 위해 외래 키가 사용되며, 데이터베이스 간의 관계를 정의하는 데 중요한 역할을 수행합니다. 하지만 데이터를 더 효과적으로 다루기 위해서 외래 키 검사를 일시적으로 활성화/비활성화가 가능한데요, 지금부터 알아보는 시간을 가져보도록 하겠습니다. 😉
※ 관계형 데이터베이스 관리 시스템(RDBMS)은 관계형 데이터베이스를 만들고 업데이트하고 관리하는 데 사용하는 프로그램입니다. 잘 알려진 RDBMS의 예로는 MySQL, PostgreSQL, MariaDB, Microsoft SQL Server, Oracle Database가 있습니다.
외래 키 검사 활성화/비활성화 (SET FOREIGN_KEY_CHECKS) 🔗
예시 테이블 생성 📝
![](https://velog.velcdn.com/images/zihvvan/post/85fa0e23-394b-4648-8a9a-88c67011339c/image.PNG)
![](https://velog.velcdn.com/images/zihvvan/post/e50dcd37-41c9-47f6-b4be-765e53c43888/image.PNG)
![](https://velog.velcdn.com/images/zihvvan/post/c5f31de7-c66c-4805-a811-73bdc4957e05/image.PNG)
![](https://velog.velcdn.com/images/zihvvan/post/ca79fd72-0150-42e8-ac8b-40aee4dd41e7/image.PNG)
일단 Academy(학원) [부모]테이블과 Student(학생) [자식]테이블을 생성하겠습니다. 생성할 때에 Student 테이블이 Academy 테이블의 외래 키 참조를 가지고 있게 하였습니다. 그 후 학원 테이블과 학생 테이블에 각각의 데이터를 삽입하였습니다.
![](https://velog.velcdn.com/images/zihvvan/post/665dc9a9-2480-404f-8550-0adbe6ecbca3/image.PNG)
![](https://velog.velcdn.com/images/zihvvan/post/bc9eccb2-b643-4c9f-a00c-53bc318676b5/image.PNG)
🚨 Academy 테이블에서 수학학원 레코드를 삭제하려 한다면 Academy테이블의 레코드가 Student테이블에서 참조되고 있어서 삭제가 불가능 합니다.
즉, 부모 테이블의 레코드가 자식 테이블에서 참조되고 있다면 삭제가 불가능합니다. 만약 Academy테이블의 수학학원 레코드를 삭제하려면 Student테이블에 수학학원 레코드를 참조하고 있는 학생 레코드를 삭제한 뒤에 진행해야합니다.
SET FOREIGN_KEY_CHECKS 사용법 ⭐
SET FOREIGN_KEY_CHECKS 쿼리문은 MySQL/MariaDB에서 외래 키 검사를 활성화 또는 비활성화하는 데 사용됩니다. SET FOREIGN_KEY_CHECKS는 현재 세션에서 외래 키 검사 활성화/비활성화가 가능하며, 주로 데이터를 불러오거나 변경할 때 사용됩니다.
외래 키 검사 비활성화 ⭐
외래 키 검사를 비활성화하려면 다음과 같이 쿼리문을 작성합니다.
![](https://velog.velcdn.com/images/zihvvan/post/ef953157-a482-4f5c-b837-5fff6108a492/image.PNG)
SET FOREIGN_KEY_CHECKS = 0;
외래 키 제약 조건이 비활성화되었으며, Student[자식]테이블에서 참조된 Academy[부모]테이블의 데이터를 삽입, 수정, 삭제등의 작업을 수행할 때 외래 키 검사가 수행되지 않습니다. 따라서 Academy 테이블의 수학학원 데이터를 먼저 삭제를 해도 오류 발생없이 정상적으로 진행됩니다.
DELETE, UPDATE, INSERT, ALTER TABLE, DROP TABLE등의 여러 변경 작업이 외래 키 제약 조건에 영향을 받지 않게 됩니다.
외래 키 검사 활성화 ⭐
외래 키 검사를 다시 활성화하려면 다음과 같이 쿼리문을 작성합니다.
![](https://velog.velcdn.com/images/zihvvan/post/19688357-e8fc-4287-b1a3-6fb45bbf4766/image.PNG)
SET FOREIGN_KEY_CHECKS = 1;
외래 키 제약 조건이 다시 활성화되며, 모든 변경 작업에 대해 외래 키 무결성 검사가 수행됩니다. ✨
SET FOREIGN_KEY_CHECKS 명령어는 외래 키 무결성을 관리하는 도구이며 외래 키 검사를 일시적으로 비활성화하여 데이터를 변경하거나 백업, 복원등 여러 작업을 수행할 때 데이터 작업을 보다 효과적으로 할 수 있습니다. 주의해야 할 점은 외래 키 검사를 비활성화한 상태에서 작업을 하고나서 반드시 외래 키 검사를 다시 활성화하여 데이터의 무결성을 보호할 수 있도록 해야 합니다. SET FOREIGN_KEY_CHECKS의 기능을 잘 활용하는데에 도움이 되었기를 바라겠습니다. 제 블로그 방문해주셔서 감사합니다!! 🤗