MySQL: วิธีตรวจสอบกุญแจต่างประเทศที่เกี่ยวข้องกับตาราง


43

จะเห็นกุญแจต่างประเทศที่เกี่ยวข้องกับตารางใน MySql ได้อย่างไร?

แบ็คกราวน์ : ฉันต้องการวางตารางใน MySql ซึ่งมีข้อ จำกัด รหัสต่างประเทศ เมื่อฉันทำฉันได้รับสิ่งนี้:

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

ฉันจะวางกุญแจต่างประเทศที่เกี่ยวข้องกับตารางจากผู้อื่นได้อย่างไร

คำตอบ:


55

อันดับแรกค้นหาFOREIGN KEYชื่อข้อ จำกัดของคุณด้วยวิธีนี้:

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';

จากนั้นคุณสามารถลบข้อ จำกัด ที่ระบุชื่อด้วยวิธีต่อไปนี้:

ALTER TABLE My_Table DROP FOREIGN KEY My_Table_Constraint;

อ้างอิง: 1 & 2

ตามที่แนะนำโดย @SteffenWinkler ในความคิดเห็นหากมีชื่อของตารางนั้นมากกว่าหนึ่งตารางในสคีมา / ฐานข้อมูลต่าง ๆ คุณสามารถเพิ่มภาคแสดงเพิ่มเติมลงในส่วนคำสั่งย่อยของคุณได้ที่:

AND TABLE_SCHEMA = 'My_Database';

1
ขอบคุณสำหรับการแก้ไข - ฉันจะตอบกลับด้วยการ +1 คำถามของคุณ :-)
Vérace

16
นอกจากนี้SHOW CREATE TABLE My_Table;.
Rick James

2
@RickJames ที่แสดงเฉพาะข้อ จำกัด ในตารางอื่น ๆ ที่My_Tableมี คำถามถามถึงข้อ จำกัด ในMy_Tableตารางอื่นที่มี
ADTC

2
สำหรับคนที่เพียงแค่เหลือบมองเหนือสิ่งนี้: คำสั่งนั้นจะแสดงรายการข้อ จำกัด ทั้งหมดที่อ้างอิงตารางโดยชื่อที่ระบุในเซิร์ฟเวอร์ฐานข้อมูลทั้งหมด จำกัด เฉพาะฐานข้อมูลที่เกี่ยวข้องโดยเพิ่มAND TABLE_SCHEMA = 'My_Database';
Steffen Winkler

3

แก้ไขคำค้นหาด้านบน เปลี่ยนชื่อตารางอ้างอิงเป็นชื่อตารางเป็นตารางอ้างอิงซึ่งเป็นตารางที่อ้างอิงและผลลัพธ์ของการสืบค้นเดิมจะไม่แสดงรหัสต่างประเทศในตารางของคุณ

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.