MySQL에서 데이터를 삭제하는 방법은 DELETE, DROP, TRUNCATE 이렇게 3가지가 존재합니다.
데이터를 삭제한다고 해서 같은 결과 값이 나오지 않는데요. 데이터 삭제를 했을 때 어떤 결과가 일어나는지 간략하게 설명해 보자면
1) DELETE : 데이터만 삭제( 단위 : 행 ), 테이블 존재
where절 사용 👉 특정 행만 삭제 가능
⭐ auto_increment 초기화 X
2) DROP : 테이블 삭제, 테이블이 삭제가 되면서 전체 데이터도 삭제
3) TRUNCATE : 데이터만 삭제, 테이블 존재
WHERE절이 불가능 👉 테이블 안 데이터를 통으로 삭제
⭐ auto_increment 초기화 O
삭제 방법
1) DELETE
DELETE FROM 테이블명 WHERE 조건 = 조건값
2) DROP
DROP TABLE 테이블명
3) TRUNCATE
TRUNCATE 테이블명
문제 발생
DELETE나 TRUNCATE를 사용하다 보면 FOREIGN_KEY가 설정된 경우가 있을 텐데요. 그때 데이터를 삭제를 하게 되면 제약조건 때문에 Cannot truncate a table referenced in a foreign key constraint (`bookstore`.`order_books`, CONSTRAINT `fk_order_info` FOREIGN KEY (`order_id`) REFERENCES `Bookstore`.`orders` (`idx`))라는 에러가 발생하게 됩니다.
그렇다면 어떻게 해결을 해야 할까요?
방법은 간단합니다. 제약조건 체크 설정을 해지하고 데이터를 삭제한 뒤에 제약조건 체크 설정을 다시 진행해 주면 됩니다.
SET FOREIGN_KEY_CHECKS = 0;
TRUNCATE 테이블명;
SET FOREIGN_KEY_CEHCKS = 1;
'데이터베이스' 카테고리의 다른 글
UPSERT로 INSERT와 UPDATE 한번에 하기 (0) | 2024.01.15 |
---|---|
스칼라 서브쿼리 (0) | 2024.01.07 |
[SQL] timezone 수정하기 (0) | 2023.12.20 |
DATABASE의 제약조건 (NOT NULL과 DEFAULT) (0) | 2023.12.19 |
[SQL] 날짜/시간 타입 (0) | 2023.12.19 |