Pelanggaran Kekangan Kunci Asing: Memadam atau Mengemas kini Baris Induk
Percubaan untuk memadamkan rekod daripada jadual jobs
(jadual induk) mengakibatkan ralat pelanggaran kekangan kunci asing. Mesej ralat merujuk kepada jadual advertisers
, khususnya kekangan advertisers_ibfk_1
, yang memautkan advertisers.advertiser_id
ke jobs.advertiser_id
. Kebergantungan ini menghalang pemadaman atau pengubahsuaian baris induk.
Punca utama terletak pada skema pangkalan data:
<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>
Kekangan kunci asing dalam jadual advertisers
memberi mandat bahawa setiap advertiser_id
mesti mempunyai entri yang sepadan dalam jadual jobs
. Jika kerja (cth., job_id
= 1) dikaitkan dengan pengiklan (advertiser_id
= 1), pemadaman kerja meninggalkan advertiser_id
dalam jadual advertisers
yatim, sekali gus melanggar kekangan. Pangkalan data menyekat tindakan ini untuk mengekalkan integriti data.
Menyelesaikan Pelanggaran Kekangan
Penyelesaian melibatkan melumpuhkan semakan kunci asing buat sementara waktu:
<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>
Ini memintas penguatkuasaan kekangan, membenarkan pemadaman. Yang penting, mendayakan semula semakan selepas itu adalah penting untuk memulihkan integriti pangkalan data. Walau bagaimanapun, ini adalah penyelesaian sementara. Pendekatan yang lebih mantap akan melibatkan pemadaman berlatarkan (ON DELETE CASCADE) atau mengurus data berkaitan dengan betul dalam jadual advertisers
sebelum memadam daripada jobs
.
Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Memadam Baris Induk Kerana Pelanggaran Kekangan Kunci Asing?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!