Rumah > pangkalan data > tutorial mysql > Mengapa Saya Tidak Boleh Memadam Baris Induk Kerana Pelanggaran Kekangan Kunci Asing?

Mengapa Saya Tidak Boleh Memadam Baris Induk Kerana Pelanggaran Kekangan Kunci Asing?

Susan Sarandon
Lepaskan: 2025-01-14 16:21:44
asal
232 orang telah melayarinya

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

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan