고객정보가 담긴 customers, 주문정보가 담긴 orders 테이블이 있다.
orders 테이블의 customer_id 컬럼은 foreign key로, customers 테이블의 id컬럼을 참조한다.
select *
from customers;
select *
from orders
order by customer_id;
4번 회원이 탈퇴해서 회원정보를 삭제하려고 한다.
delete from customers
where id = 4;
Error Code: 1451. Cannot delete or update a parent row: a foreign key constraint fails
라는 에러가 발생하며 삭제되지 않는다.
그 이유는 여러 개의 테이블이 foreign key 로 묶여있는 경우,
서로가 연결되어 있기 때문에 어느 하나를 지워서는 정보가 꼬이는 상황이 발생할 수 있기 때문이다.
foreign key 로 연결된 데이터들이 일관성을 유지할 수 있도록 하기 위해서, foreign key constraints 라는 것이 있는데
이 중 CASCADE 는 부모 테이블의 row 에 DELETE 또는 UPDATE 명령어를 적용할 때,
자동적으로 자식 테이블의 매치되는 row 에도 똑같이 DELETE 또는 UPDATE 를 반영하는 것을 의미한다.
이를 사용하기 위해서는 foreign key constraints 옵션에 ON DELETE CASCADE 를 설정해줘야 한다.
MySQL Workbench 툴을 이용해 변경하는 법을 알아보자.
Foreign Key Options - On Delete 가 RESTRICT로 되어 있는데, CASCADE로 바꿔준다. (update 할 때는 On Update 변경)
Apply 하고 다시 4번 회원정보를 삭제해보자.
delete from customers
where id = 4;
에러 없이 잘 동작한다.
select *
from customers
where id =4;
select *
from orders
where customer_id = 4;
부모컬럼과 자식컬럼 모두 데이터가 삭제된 걸 알 수 있다.
'MySQL' 카테고리의 다른 글
MySQL Workbench 다중 컬럼 Unique 설정하기 (0) | 2022.12.11 |
---|---|
MySQL - null을 다른 값으로 대체하는 방법. ifnull( ) (0) | 2022.12.11 |
MySQL - 두 개 이상의 테이블을 연결하기 join, left join (0) | 2022.12.09 |
MySQL Workbench에서 foreign key 설정하기 (0) | 2022.12.09 |
MySQL 조건문 사용하기 case, if (0) | 2022.12.09 |