كيفية التحقق من المفاتيح الخارجية المتعلقة بالجدول

dba.stackexchange https://dba.stackexchange.com/questions/102371

سؤال

كيف ترى المفاتيح الخارجية المتعلقة جدول في الخلية?

معلومات أساسية :كنت أرغب في إسقاط جدول في الخلية التي لديها قيد مفتاح خارجي.عندما أفعل ذلك أحصل على هذا:

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

كيف يمكنني إسقاط المفاتيح الخارجية المتعلقة بالجدول وترك الآخرين.

هل كانت مفيدة؟

المحلول

أولا ، معرفة الخاص بك 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';

يمكنك أيضا إضافة (إلى WHERE شرط) إذا كان لديك أكثر من جدول يسمى My_Table في مخططات مختلفة.

AND TABLE_SCHEMA = 'My_Database';

ثم يمكنك إزالة القيد المسمى بالطريقة التالية:

ALTER TABLE My_Table DROP FOREIGN KEY My_Table_Constraint;

المراجع: 1 & 2.

نصائح أخرى

إديتيد الاستعلام أعلاه.تغيير اسم الجدول المشار إليه إلى اسم الجدول كما اسم الجدول المشار إليه هو الجدول الذي يتم الرجوع إليه ، وبالتالي فإن نتيجة الاستعلام الأصلي لن تظهر لك المفاتيح الخارجية على الجدول الخاص بك.

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

في الخلية 5.7.يمكنك العثور على علاقات الجدول وقواعد العلاقات.

SELECT
  DISTINCT a.TABLE_NAME,
  a.CONSTRAINT_NAME,
  b.DELETE_RULE,
  b.UPDATE_RULE,
  a.REFERENCED_TABLE_NAME,
  a.COLUMN_NAME,
  a.REFERENCED_COLUMN_NAME,
  a.TABLE_SCHEMA
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE a
JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS b USING (CONSTRAINT_NAME)
WHERE
    a.TABLE_SCHEMA = "DATABASE_NAME" AND
    a.REFERENCED_TABLE_NAME = 'TABLE_NAME'
ORDER BY a.TABLE_NAME ASC;

يمكنك تنفيذ إخراج هذا الاستعلام مباشرة لإسقاط قيد الجدول المشار إليه.



select concat('ALTER TABLE ' ,CONSTRAINT_SCHEMA,'.',TABLE_NAME,' DROP FOREIGN KEY ' ,CONSTRAINT_NAME ,';' )
from  information_schema.REFERENTIAL_CONSTRAINTS  
where REFERENCED_TABLE_NAME='<<table to be dropped >> ';


مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى dba.stackexchange
scroll top