Apabila menambahkan kunci asing pada jadual sedia ada yang merujuk yang lain, adalah penting untuk memastikan baris yang dirujuk wujud dalam jadual induk. Jika tidak, ralat "Tidak boleh menambah atau mengemas kini baris anak: kekangan kunci asing gagal" boleh berlaku.
Dalam kes yang disediakan, anda cuba menambah kunci asing (sourcecode_id) dalam jadual sourcecodes_tags yang merujuk jadual kod sumber. Walau bagaimanapun, berdasarkan pertanyaan SHOW CREATE TABLE anda, nampaknya tiada kunci asing yang ditakrifkan pada jadual sourcecodes_tags yang merujuk kepada jadual kod sumber.
Mesej ralat menunjukkan bahawa terdapat pelanggaran kunci asing, bermakna beberapa sourcecode_id nilai dalam jadual sourcecodes_tags tidak wujud dalam jadual sourcecodes. Untuk menyelesaikan isu ini, anda perlu mengenal pasti dan mengalih keluar rekod yatim tersebut.
Mengenalpasti Rekod Anak Yatim
Untuk mencari nilai sourcecode_id yang tidak wujud dalam jadual kod sumber, anda boleh menggunakan pertanyaan berikut:
SELECT DISTINCT sourcecode_id FROM sourcecodes_tags tags LEFT JOIN sourcecodes sc ON tags.sourcecode_id=sc.id WHERE sc.id IS NULL;
Pertanyaan ini akan mengembalikan nilai sourcecode_id yang bukan dikaitkan dengan mana-mana baris dalam jadual kod sumber.
Mengalih keluar Rekod Anak Yatim
Setelah anda mengenal pasti rekod yatim, anda boleh memadamkannya menggunakan pernyataan PADAM:
DELETE FROM sourcecodes_tags WHERE sourcecode_id IN ( SELECT DISTINCT sourcecode_id FROM sourcecodes_tags tags LEFT JOIN sourcecodes sc ON tags.sourcecode_id=sc.id WHERE sc.id IS NULL );
Selepas mengalih keluar rekod yatim, anda sepatutnya boleh menambah kekangan kunci asing tanpa sebarang masalah.
ALTER TABLE sourcecodes_tags ADD FOREIGN KEY (sourcecode_id) REFERENCES sourcecodes (id) ON DELETE CASCADE ON UPDATE CASCADE;
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat 'Kekangan Kunci Asing Gagal' dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!