MySQL: Cara memeriksa kunci asing yang terkait dengan tabel

43

Bagaimana cara melihat kunci asing terkait dengan tabel di MySql?

Latar Belakang : Saya ingin menjatuhkan tabel di MySql yang memiliki batasan kunci asing. Ketika saya melakukannya saya mendapatkan ini:

Error Code: 1217. Cannot delete or update a parent row: a foreign key constraint fails

Bagaimana saya bisa menjatuhkan kunci asing yang terkait dengan tabel meninggalkan orang lain.

mahasiswa
sumber

Jawaban:

55

Pertama, cari tahu FOREIGN KEYnama kendala Anda dengan cara ini:

SELECT
  TABLE_NAME,
  COLUMN_NAME,
  CONSTRAINT_NAME,   -- <<-- the one you want! 
  REFERENCED_TABLE_NAME,
  REFERENCED_COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
  REFERENCED_TABLE_NAME = 'My_Table';

Dan kemudian Anda bisa menghapus kendala bernama dengan cara berikut:

ALTER TABLE My_Table DROP FOREIGN KEY My_Table_Constraint;

Referensi: 1 & 2 .

Seperti yang disarankan oleh @SteffenWinkler dalam komentar, jika ada lebih dari satu tabel dari nama itu di berbagai skema / basis data, Anda dapat menambahkan predikat lebih lanjut pada klausa where Anda:

AND TABLE_SCHEMA = 'My_Database';
Vérace
sumber
1
Terima kasih atas hasil edit - Saya akan membalas dengan memberi +1 pada pertanyaan Anda! :-)
Vérace
16
Juga SHOW CREATE TABLE My_Table;,.
Rick James
2
@ RickJames yang hanya menunjukkan batasan pada tabel lain yang My_Tablememiliki. Pertanyaan menanyakan kendala pada My_Tabletabel lainnya.
ADTC
2
hanya untuk orang-orang yang hanya melirik ini: Pernyataan itu akan mendaftar semua kendala referensi tabel dengan nama yang ditentukan di seluruh server database. Batasi pada basis data yang relevan dengan menambahkanAND TABLE_SCHEMA = 'My_Database';
Steffen Winkler
3

Edit Query di atas. Mengubah nama tabel yang direferensikan menjadi nama tabel sebagai nama tabel yang direferensikan adalah tabel yang direferensikan dan karenanya hasil dari kueri asli tidak akan menunjukkan kunci asing di meja Anda.

SELECT
  TABLE_NAME,
  COLUMN_NAME,
  CONSTRAINT_NAME,   -- <<-- the one you want! 
  REFERENCED_TABLE_NAME,
  REFERENCED_COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
  Table_name = 'case_qualitycontrolcase' and constraint_name = f
syed umar
sumber