MySQL의 foreign_key_checks 변수는 세션(session) 기반으로 동작합니다. 즉, 이 변수는 세션(Session) 또는 전역(Global) 범위로 설정할 수 있으며, 필요에 따라 현재 접속에만 적용하거나 서버 전체에 적용할 수 있습니다.
foreign_key_checks 설정 방법
아래 예제를 통해 세션 단위와 전역 단위 설정 방법을 확인할 수 있습니다.
mysql> set foreign_key_checks = 0; Query OK, 0 rows affected (0.00 sec) mysql> set global foreign_key_checks = 0; Query OK, 0 rows affected (0.05 sec)
첫 번째 구문은 현재 세션에만 적용되고, 두 번째 구문은 서버 전체(Global)에 적용됩니다. 따라서 특정 작업에만 외래 키 검사를 임시로 비활성화하고 싶다면 세션 단위로 설정하는 것이 안전합니다.
foreign_key_checks 시스템 변수 속성
foreign_key_checks는 MySQL 서버 시스템 변수이며, 주요 속성은 다음과 같습니다.
| 속성 | 값 |
|---|---|
| 시스템 변수명 | foreign_key_checks |
| 범위(Scope) | Global, Session |
| 동적 변경 가능 여부 | Yes |
| 타입 | Boolean |
| 기본값 | ON |
foreign_key_checks = 0으로 설정한 경우
외래 키 검사를 비활성화하면 데이터 정의문(DDL)에도 영향을 줍니다. 예를 들어 DROP SCHEMA는 해당 스키마 내부뿐 아니라 스키마 외부의 테이블에서 참조되는 외래 키가 있더라도 스키마를 삭제하며, DROP TABLE 역시 다른 테이블에서 참조 중인 외래 키가 있는 테이블도 삭제할 수 있습니다.
foreign_key_checks = 1로 되돌린 경우
외래 키 검사를 다시 활성화해도 기존 테이블 데이터에 대한 일괄 검사(스캔)는 수행되지 않습니다. 따라서 foreign_key_checks = 0 상태에서 삽입된 행들은 참조 무결성 검증 없이 그대로 남아있을 수 있다는 점을 반드시 유의해야 합니다.
정리
foreign_key_checks는 전역과 세션 두 가지 범위에서 모두 설정 가능한 동적 변수입니다. 대량 데이터 마이그레이션이나 스키마 변경 시 편리하지만, 비활성화 기간 동안 입력된 데이터의 무결성은 보장되지 않으므로 사용 후 반드시 원래 값(ON)으로 복구하고 데이터 정합성을 별도로 점검하는 것이 좋습니다.