홈/Article
Article빌드 노트

쌍 외래키 삭제하기

mysql에서 데이타를 삭제하는데, 외래키( foreign key)가 지정되어 삭제가 되지 않아서 다른 테이블 데이타를 삭제하려고 보니.. 여기도 이 테이블에 외래키 참조를 하고 있었다. ㅡ.ㅜ;즉, 서로가 서로를 참조하는 순환 참조(circular reference) 상황이 발생한 것이다.::: 문제...

라이언 칸 작성 - 2025년 3월 18일2분

mysql에서 데이타를 삭제하는데, 외래키( foreign key)가 지정되어 삭제가 되지 않아서 다른 테이블 데이타를 삭제하려고 보니.. 여기도 이 테이블에 외래키 참조를 하고 있었다. ㅡ.ㅜ;

즉, 서로가 서로를 참조하는 순환 참조(circular reference) 상황이 발생한 것이다.


::: 문제 발생

MariaDB [platform]> delete from users where id='25986';
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`platform`.`companies`, CONSTRAINT `companies_owner_id_foreign` FOREIGN KEY (`owner_id`) REFERENCES `users` (`id`))

우선 users에서 삭제 시도시 companies 외래키(owner_id)로 인해 삭제가 거부되었다.

그래서 copanies에서 삭제를 시도했다.

MariaDB [platform]> delete from companies where id='180';
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`platform`.`users`, CONSTRAINT `users_company_id_foreign` FOREIGN KEY (`company_id`) REFERENCES `companies` (`id`))

그랬더니, users의 외래키(company_id)로 인해 삭제를 못한다고 한다.

::: 해결방법

이를 해결하는 방법은 외래키를 일시적으로 제거해야 한다.

company_id, owner_id 를 null이나 다른 값으로 대체해서 update 시키고, 삭제하는 방법도 있으며..

MariaDB [platform]> UPDATE users SET company_id = NULL WHERE company_id = '180';
MariaDB [platform]> UPDATE companies SET owner_id = NULL WHERE owner_id = '25986';

MariaDB [platform]> DELETE FROM users WHERE id='25986';
MariaDB [platform]> DELETE FROM companies WHERE id='180';

아니면 외래키 제약 조건을 일시적으로 비활성화한 후 삭제하면 된다.

MariaDB [platform]> SET FOREIGN_KEY_CHECKS = 0;
MariaDB [platform]> DELETE FROM users WHERE id='25986';
MariaDB [platform]> DELETE FROM companies WHERE id='180';
MariaDB [platform]> SET FOREIGN_KEY_CHECKS = 1;

<i>이 글은 블로그 이전으로 티스토리에서 가져온 글입니다.</i>

댓글

생각을 남겨주세요

0

아직 댓글이 없습니다.

같은 주제의 글