Pertanyaan mengubah tabel menambahkan kunci asing gagal


Saya memiliki 3 tabel dan mereka semua memiliki mesin innodb:

video(url, title, desc, country,...) url -> primary key
videoCat(_url, category) {_url,category} -> primary key
favorite(fav_url, thumb_path) fav_url -> primary key

lalu saya lakukan:

alter table favorite
add foreign key(fav_url) references video(url)
on delete cascade

dan semuanya berjalan lancar, tetapi ketika saya mencoba:

alter table videoCat
add foreign key(_url) references video(url)
on delete cascade

Saya mendapat:

1452 - Tidak dapat menambah atau memperbarui baris anak: batasan kunci asing gagal (bascelik_lookaroundyou. <hasil 2 ketika menjelaskan nama file '# sql-efa_1a6e91a'>, CONSTRAINT #sql-efa_1a6e91a_ibfk_1 KUNCI ASING (_url) REFERENSI video (url) PADA DELETE CASCADE)

Mengapa???

p.s. Saya menggunakan phpmyadmin ver. 3.3.9.2


20
2018-05-05 20:22


asal


Jawaban:


Tabel videoCat memiliki satu atau lebih baris yang melanggar batasan kunci asing. Ini biasanya Anda memiliki baris dengan nilai untuk _url yang tidak ada dalam video tabel.

Anda dapat memeriksa ini dengan pertanyaan berikut:

SELECT videoCat._url
FROM videoCat LEFT JOIN video ON videoCat._url = video.url
WHERE video.url IS NULL

EDIT

Per permintaan, berikut adalah kueri untuk menghapus baris-baris sial itu:

DELETE FROM videoCat
WHERE NOT EXISTS (
    SELECT *
    FROM video
    WHERE url = videoCat._url
)

35
2018-05-05 20:26