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



댓글
생각을 남겨주세요
댓글을 남기려면 로그인해 주세요.
댓글 로그인 설정이 아직 준비 중입니다.
아직 댓글이 없습니다.