외래 키 제약 조건 위반: 상위 행 삭제 또는 업데이트
jobs
테이블(상위 테이블)에서 레코드를 삭제하려고 하면 외래 키 제약 조건 위반 오류가 발생합니다. 오류 메시지는 advertisers
테이블, 특히 advertisers_ibfk_1
을 advertisers.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 중국어 웹사이트의 기타 관련 기사를 참조하세요!