이전글에 DELETE, TRUNCATE, CASCADE, DROP 기능을 살펴 봤습니다.
[링크]
테이블의 delete를 사용하게 되어도 Auto_Increment의 값을 유지 됩니다.
그러나 Truncate를 사용하게 되면 Auto_Incremeent의 값은 0으로 초기화 됩니다.
그런 Truncate를 사용하게 될 때, 1가지 문제점이 있습니다.
Truncate를 사용하게 될 때, 해당 테이블의 Foreigen Key로 인해서
삭제 안될 수 있다는 것이다.
즉 , 외래키때문에 truncate를 사용할 수 없다는 것이다.
그래서 오류 해결하기 위한 1가지 문법이 있다.
SET Foreign_key_checks = 0;
데이터베이스에 TRUNCATE를 사용할 때 발생할 수 있는 Error
SQL Error [1701] [42000]:
Cannot truncate a table referenced in a foreign key
constraint (`bookshop`.`orderedBook`, CONSTRAINT `orderdBooek_orders_FK`)
쉽게 설명하면 foreign key제약 조건으로 TRUNCATE를 실행할 수 없다는 의미 입니다.
TRUNCATE 명령어는 테이블의 모든 데이터를 빠르게 삭제하지만, 이는 트랜잭션 로그에 기록되지 않고 외래 키 제약 조건(Foreign Key Constraint)을 무시하지 않습니다.orderedBook이 다른 테이블(orders)과 외래 키로 연결되어 있으므로, TRUNCATE 명령어를 실행할 수 없습니다.오류 메시지의 내용을 보면, 다음과 같은 제약 조건이 있습니다:
orderedBook에는 orderdBooek_orders_FK라는 외래 키가 정의되어 있고,bookshop.orders 테이블을 참조하고 있습니다.외래 키 제약 조건을 비활성화한 뒤 TRUNCATE를 실행할 수 있습니다.
sql
코드 복사
-- 외래 키 제약 비활성화
SET FOREIGN_KEY_CHECKS = 0;
-- 테이블 데이터 삭제
TRUNCATE TABLE orderedBook;
-- 외래 키 제약 활성화
SET FOREIGN_KEY_CHECKS = 1;
⚠️ 주의: 외래 키 제약을 비활성화하면 참조 무결성이 깨질 수 있으므로, 테이블 데이터 삭제 전에 충분히 검토하세요.
SET FOREIGN_KEY_CHECKS = 0), 외래 키 삭제, 또는 DELETE 명령으로 문제를 해결할 수 있습니다.DELETE를 사용하는 것이 더 안전합니다.