DB/MySQL

[My-SQL] ON DELETE CASCADE (외래키로 연결된 row 한번에 지우는 법)

서견 2023. 2. 17. 16:00

ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails

지울려고 하는 테이블의 row 가 다른 테이블에 foreign key로 묶여 있을때 나는 오류

 

ON DELETE CASCADE

foreign key 로 연결된 데이터들이 일관성을 유지할 수 있도록 하기 위해서, foreign key constraints 라는 것이 있습니다. 공식 문서는 CASCADE 를 foreign key constraints 에서 옵션으로 사용할 수 있는 Referential Actions 이라고 설명합니다.

CASCADE 는 부모 테이블의 row 에 DELETE 또는 UPDATE 명령어를 적용할 때, 자동적으로 자식 테이블의 매치되는 row 에도 똑같이 DELETE 또는 UPDATE 를 반영하는 것을 의미합니다. 이를 사용하기 위해서는 foreign key constraints 옵션에 ON DELETE CASCADE 를 설정해주어야 합니다. (ON UPDATE CASCADE 를 설정하면 UPDATE 를 할 때 CASCADE 옵션이 적용되겠죠.)

ON DELETE CASCADE 옵션을 적용하면 부모 테이블에서 row 를 삭제할 경우 연결된 자식 테이블의 row 가 함께 삭제됩니다. 연결된 데이터를 한 번에 지울 수 있어 데이터의 관리가 편리해지고 일관성을 유지할 수 있습니다.

ON DELETE CASCADE 는 테이블의 생성 시, 다시 말해 CREATE TABLE 명령어를 사용해 테이블을 생성할 때 적용하게 됩니다. 만약 이미 테이블이 생성되었다면, ALTER TABLE 명령어를 활용해 기존의 foreign key 부분을 지웠다가 다시 생성하는 방식으로 사용할 수 있습니다.

기존의 foreign key 를 제거하고 다시 추가하는 방법은 다음과 같습니다

 

// _로 연결된 부분에 사용할 값을 넣으시면 됩니다.
// 기존의 foreign key 지우는 방법
ALTER TABLE table_name DROP FOREIGN KEY foreign_key_symbol

// 실제 사용 예제
ALTER TABLE order_items DROP FOREIGN KEY order_items_ibfk_1;

// ON DELETE CASCADE 포함한 foreign key 재생성
// 괄호가 있는 경우 괄호를 꼭 사용해야 합니다.
ALTER TABLE 자식_table_name 
ADD FOREIGN KEY (foreign_key_연결받을_자식_테이블의_column_name) 
REFERENCES 부모_table_name (foreign_key_로_가져올_column_name)
ON DELETE CASCADE;

// 실제 사용 예제
ALTER TABLE order_items 
ADD FOREIGN KEY (item_id) 
REFERENCES orders (id)
ON DELETE CASCADE;

.

외래키 확인법 ( 테이블 기준)

select * from information_schema.table_constraints where table_name = '테이블명';

외래키 확인법 ( 스키마 기준)

select * from information_schema.table_constraints where constraint_schema = '데이터베이스명';
 

출처 :

 

ON DELETE CASCADE (feat. foreign key 로 연결된 row 한 번에 지우는 방법) (TIL 78일차)

DELETE 는 테이블 내의 레코드를 삭제할 때 사용하는 명령어입니다. 학생에 관한 정보를 모아둔 위와 같은 테이블이 있다고 할 때, DELETE 를 활용하면 조건에 따라 개별 학생의 정보가 담긴 row 를

velog.io

 

 

[MySQL] foreign key(외래키) 추가, 삭제, 확인 방법

[MySQL] foreign key(외래키) 추가, 삭제, 확인 방법1.foreign key 추가alter table [추가할테이블명] add constraint [제약조건명] foreign key(컬럼명) references [부모테이블명] (PK컬럼명) [ON DELETE CASCADE / ON UPDATE CASECAD

allg.tistory.com