> 데이터 베이스 > MySQL 튜토리얼 > 외래 키 제약 조건 위반으로 인해 상위 행을 삭제할 수 없는 이유는 무엇입니까?

외래 키 제약 조건 위반으로 인해 상위 행을 삭제할 수 없는 이유는 무엇입니까?

Susan Sarandon
풀어 주다: 2025-01-14 16:21:44
원래의
232명이 탐색했습니다.

Why Can't I Delete a Parent Row Due to a Foreign Key Constraint Violation?

외래 키 제약 조건 위반: 상위 행 삭제 또는 업데이트

jobs 테이블(상위 테이블)에서 레코드를 삭제하려고 하면 외래 키 제약 조건 위반 오류가 발생합니다. 오류 메시지는 advertisers 테이블, 특히 advertisers_ibfk_1advertisers.advertiser_id에 연결하는 jobs.advertiser_id 제약 조건을 참조합니다. 이 종속성은 상위 행의 삭제 또는 수정을 방지합니다.

근본 원인은 데이터베이스 스키마에 있습니다.

<code class="language-sql">CREATE TABLE `advertisers` (
  `advertiser_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  ...
  PRIMARY KEY (`advertiser_id`),
  FOREIGN KEY (`advertiser_id`) REFERENCES `jobs` (`advertiser_id`)
);

CREATE TABLE `jobs` (
  `job_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `advertiser_id` int(11) unsigned NOT NULL,
  ...
  PRIMARY KEY (`job_id`)
);</code>
로그인 후 복사

advertisers 테이블의 외래 키 제약 조건에 따라 모든 advertiser_id에는 jobs 테이블에 해당 항목이 있어야 합니다. 작업(예: job_id = 1)이 광고주(advertiser_id = 1)와 연결된 경우 작업을 삭제하면 advertiser_id 테이블의 advertisers이 분리되어 제약 조건을 위반하게 됩니다. 데이터베이스는 데이터 무결성을 유지하기 위해 이 작업을 차단합니다.

제약 위반 해결

외래 키 검사를 일시적으로 비활성화하는 방법은 다음과 같습니다.

<code class="language-sql">SET FOREIGN_KEY_CHECKS = 0; -- Disable foreign key checks
DELETE FROM `jobs` WHERE `job_id` = 1 LIMIT 1;
SET FOREIGN_KEY_CHECKS = 1; -- Re-enable foreign key checks</code>
로그인 후 복사

이는 제약 조건 적용을 우회하여 삭제를 허용합니다. 결정적으로, 데이터베이스 무결성을 복원하려면 나중에 검사를 다시 활성화하는 것이 중요합니다. 그러나 이는 일시적인 해결 방법입니다. 보다 강력한 접근 방식은 계단식 삭제(ON DELETE CASCADE) 또는 advertisers에서 삭제하기 전에 jobs 테이블의 관련 데이터를 적절하게 관리하는 것입니다.

위 내용은 외래 키 제약 조건 위반으로 인해 상위 행을 삭제할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿