>데이터 베이스 >MySQL 튜토리얼 >테이블 삭제 시 외래 키 제약 조건을 무시하기 위한 MySQL의 코드 예제 공유

테이블 삭제 시 외래 키 제약 조건을 무시하기 위한 MySQL의 코드 예제 공유

黄舟
黄舟원래의
2017-03-18 13:57:271567검색

아래 편집기는 테이블 삭제 시 외래 키 제약 조건을 무시하는 MySQL의 간단한 구현을 제공합니다. 편집자님이 꽤 좋다고 생각하셔서 지금 공유하고 모두에게 참고용으로 드리고자 합니다. 에디터를 따라가서 살펴보겠습니다.

테이블 삭제는 특히 외래 키 연관이 있는 테이블의 경우 일반적이지 않으므로 삭제할 때 주의하세요. 그러나 개발 과정에서 스키마 설계상의 문제를 발견하고, 기존 데이터베이스의 모든 테이블을 삭제하고 다시 생성하는 일이 흔하며, 또한 테스트 중에 데이터베이스의 모든 테이블을 다시 생성해야 하는 경우도 있다. 물론 많은 자동화 도구도 이 작업을 수행할 수 있습니다.

테이블을 삭제할 때 다음 오류 메시지가 나타나는 경우가 있습니다.

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

삭제하려는 테이블의 필드가 있기 때문입니다. 다른 테이블에 대한 외래키로 사용되므로, 이 테이블(부모테이블)을 삭제하기 전에 외래키가 있는 테이블(자식테이블)을 먼저 삭제해야 합니다. 즉, 테이블을 삭제하는 과정은 테이블을 생성하는 과정과 동일해야 합니다. 변수

FOREIGN_KEY_CHECKS를 제공합니다.

일반적으로 다음을 수행하는 것이 좋습니다. 먼저 모든 DROP 문을 자동으로 생성하고 MyDatabaseName을 데이터베이스 이름으로 바꿉니다.

SELECT concat('DROP TABLE IF EXISTS ', table_name, ';')
FROM information_schema.tables
WHERE table_schema = 'MyDatabaseName';

그런 다음 다음 명령문을 추가하여 생성된 코드 앞뒤에 FOREIGN_KEY_CHECKS 변수를 설정합니다.

SET FOREIGN_KEY_CHECKS = 0
-- DROP语句
SET FOREIGN_KEY_CHECKS = 1;

그러나 마지막 문장을 잊어버려도 문제가 되지 않습니다. 이 변수는

Session

, 즉 클라이언트를 닫고 연결을 다시 설정하면 이 변수는 기본값으로 돌아갑니다. 전역 범위에서 외래 키 제약 조건을 확인할 필요가 없는 경우(이런 상황은 비교적 드물지만) 다음을 수행할 수 있습니다.

SET GLOBAL FOREIGN_KEY_CHECKS = 0;
또는

set @@global.FOREIGN_KEY_CHECKS = 0;

위 내용은 테이블 삭제 시 외래 키 제약 조건을 무시하기 위한 MySQL의 코드 예제 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.