DEV WIKI
백엔드 · 오류·증상

Cannot truncate a table referenced in a foreign key constraint (%s)

MariaDB 오류 코드 1701의 오류 메시지를 로그 또는 클라이언트 출력에서 식별하는 문서입니다.

빠른 답변

우선 확인할 원인
MariaDB 오류 코드 1701과 SQLSTATE 42000은 "Cannot truncate a table referenced in a foreign key constraint (%s)" 오류 메시지에 해당합니다.
먼저 확인할 항목
현재 MariaDB 클라이언트 출력 또는 오류 로그의 숫자 오류 코드가 1701인지 확인합니다.
적용 범위
현재 증상과 본문에 적은 관찰 조건이 함께 확인된 경우
출처 확인일
2026-07-29
최종 검토
2026-07-24
수정일
2026-07-27
오류·수정 제보 (새 창에서 열림)

현재 증상

  • 애플리케이션 오류 메시지

먼저 확인할 항목

현재 MariaDB 클라이언트 출력 또는 오류 로그의 숫자 오류 코드가 1701인지 확인합니다.

SQLSTATE가 표시된 경우 42000인지 확인합니다.

오류 문자열을 "Cannot truncate a table referenced in a foreign key constraint (%s)"와 대조합니다.

환경별 원인과 조치

오류 식별

MariaDB 오류 코드 참조에서 오류 코드 1701은 SQLSTATE 42000, 오류 식별자 ER_TRUNCATE_ILLEGAL_FK, 다음 오류 메시지로 기록되어 있습니다.

Cannot truncate a table referenced in a foreign key constraint (%s)

확인

  1. 현재 MariaDB 클라이언트 출력 또는 오류 로그에서 숫자 오류 코드가 1701인지 확인합니다.
  2. SQLSTATE가 표시되면 42000인지 확인합니다.
  3. 오류 문자열이 Cannot truncate a table referenced in a foreign key constraint (로 시작하고 닫는 괄호를 포함하는지 원문 메시지와 대조합니다.

위 값이 일치하면 이 문서는 MariaDB 오류 코드 1701을 식별하는 데 사용할 수 있습니다.

출처

진단 기록

먼저 문제가 발생한 URL 또는 화면, 표시 시각, 사용한 플랫폼과 배포 버전을 기록합니다. 화면과 로그에서 오류 문자열이 일부만 보이면 앞뒤 문장을 포함해 원문을 보존하고, 민감한 값은 가립니다.

다음 순서로 관찰값을 대조합니다.

  1. 현재 MariaDB 클라이언트 출력 또는 오류 로그의 숫자 오류 코드가 1701인지 확인합니다.
  2. SQLSTATE가 표시된 경우 42000인지 확인합니다.
  3. 오류 문자열을 "Cannot truncate a table referenced in a foreign key constraint (%s)"와 대조합니다.

각 항목은 확인한 값과 확인하지 못한 이유를 함께 기록해야 합니다. 이 문서의 조건과 실제 관찰값이 다르면 원인을 단정하지 말고, 문제 해결 시작 가이드에서 더 넓은 분기를 선택하십시오.

판정 기준

오류 문자열이 일치한다는 사실만으로 원인이 확정되지는 않습니다. 같은 문구가 여러 환경에서 나타날 수 있으므로 웹서버·런타임·운영체제·최근 변경 사항을 함께 비교합니다. 한 단계에서 기대한 값이 나오지 않으면 다음 단계로 넘어가지 말고 해당 환경의 공식 문서를 우선 확인합니다.

안전한 다음 단계

검사 전에 백업과 변경 이력을 확인하고, 비밀번호·세션 쿠키·인증 토큰·개인정보를 공개 로그나 문의 내용에 넣지 않습니다. 설정·권한·데이터를 변경해야 한다면 영향 범위와 되돌리는 방법을 먼저 기록한 뒤 운영 시간과 승인 절차에 맞춰 진행합니다.

원인 분포

[Observation] 관측된 3건의 사례에서는 다음 원인이 확인되었습니다.

원인관측 사례
참조 대상 테이블에 외래 키 정의가 존재함3건
TRUNCATE가 DELETE가 아니므로 ON DELETE CASCADE가 실행되지 않음2건
자식 테이블이 비어 있어도 외래 키 정의 때문에 실패함1건

[Hypothesis] 위 집계는 수집된 사례의 구성에 따른 것이며 실제 발생 빈도를 의미하지 않습니다.

오진 함정

  • [Observation] CodeIgniter 시더에서 발생한 사례도 프레임워크 문제가 아니라 MySQL 외래 키 제한으로 설명되었습니다.
  • [Observation] 자식 테이블이 비어 있거나 ON DELETE CASCADE가 설정되어 있어도 TRUNCATE가 허용된다는 의미는 아닙니다.
  • [Observation] TRUNCATE 대신 DELETE를 사용해야 cascade 동작을 기대할 수 있다는 사례가 있습니다.

환경 매트릭스

환경 또는 조건관측된 사실
MySQL/InnoDB 부모-자식 관계외래 키로 참조되는 부모 테이블의 TRUNCATE에서 오류 1701이 발생했습니다.
자식 테이블이 비어 있음자식 데이터가 없어도 외래 키 정의만으로 실패한 사례가 있습니다.
ON DELETE CASCADE 설정TRUNCATE에는 cascade가 적용되지 않은 사례가 있습니다.
CodeIgniter 시더시더 실행 중 오류 1701 및 SQLSTATE 42000이 출력된 사례가 있습니다.
세션 단위 FOREIGN_KEY_CHECKS=0같은 세션에서 외래 키 검사를 끈 뒤 TRUNCATE를 실행하는 방법이 제시되었습니다.

진단 순서

  1. [Observation] 오류가 발생한 작업이 TRUNCATE인지 DELETE인지 확인합니다.
  2. [Observation] 대상 테이블이 다른 테이블의 외래 키로 참조되는지 확인합니다. 자식 테이블이 비어 있는지는 외래 키 정의와 별도로 확인해야 합니다.
  3. [Observation] ON DELETE CASCADE가 있어도 현재 작업이 TRUNCATE라면 cascade가 실행되지 않는다는 점을 확인합니다.
  4. [Observation] 관계 데이터를 유지해야 하면 DELETE 사용을 검토합니다.
  5. [Observation] 완전 초기화가 확인된 경우에만 같은 세션에서 외래 키 검사를 비활성화하고 복원하거나, 외래 키를 제거·복원하는 방법을 검토합니다.
  6. [Observation] CodeIgniter 시더에서 발생했다면 프레임워크 호출보다 데이터베이스 외래 키 제약과 SQLSTATE 42000 출력을 먼저 확인합니다.

참고 자료

MariaDB Error Code Reference | Server | MariaDB Documentation (새 창에서 열림)

MariaDB · 공식 자료 · 확인 범위: MariaDB 오류 코드 1701의 SQLSTATE는 42000입니다., MariaDB 오류 코드 1701의 오류 식별자는 ER_TRUNCATE_ILLEGAL_FK입니다., MariaDB 오류 코드 1701의 오류 메시지는 "Cannot truncate a table referenced in a foreign key constraint (%s)"입니다. · 확인일: 2026-07-24

Stack Overflow · 운영 사례 (새 창에서 열림)

확인 범위: 자식 테이블이 비어 있어도 부모 테이블의 TRUNCATE에서 오류 1701이 발생했습니다., 외래 키 정의 자체가 TRUNCATE 제한의 원인으로 제시되었습니다., 세션 단위로 FOREIGN_KEY_CHECKS를 비활성화한 뒤 TRUNCATE를 실행하는 방법이 제시되었습니다. · 확인일: 2026-07-29

Stack Overflow · 운영 사례 (새 창에서 열림)

확인 범위: InnoDB 부모 테이블에 ON DELETE CASCADE가 있어도 TRUNCATE에서 오류 1701이 발생했습니다., TRUNCATE는 DELETE가 아니므로 ON DELETE CASCADE가 실행되지 않는다는 설명이 제시되었습니다., 외래 키 제약을 제거·복원하거나 세션에서 외래 키 검사를 잠시 끄는 방법과 관계를 깨뜨릴 위험이 제시되었습니다. · 확인일: 2026-07-29

Stack Overflow · 운영 사례 (새 창에서 열림)

확인 범위: CodeIgniter 시더에서 참조되는 areas 테이블을 TRUNCATE할 때 MySQL 오류 1701과 SQLSTATE 42000이 발생했습니다., 문제의 원인은 프레임워크가 아니라 MySQL 외래 키 제한으로 제시되었습니다., 관계 데이터가 남아야 하면 DELETE를 사용하고, 완전 초기화가 확인된 경우 같은 세션에서 외래 키 검사를 끄고 다시 켜는 방법이 제시되었습니다. · 확인일: 2026-07-29