الخلية:كيفية تحديد العلاقات الرئيسية الخارجية برمجيا؟

StackOverflow https://stackoverflow.com/questions/273794

  •  07-07-2019
  •  | 
  •  

سؤال

مشابه ل هذا السؤال ولكن بالنسبة لـ MySQL ....

كيف يمكنني تحديد مراجع المفاتيح الخارجية برمجياً في MySQL (بافتراض InnoDB)؟يمكنني الحصول عليها تقريبًا مع:

SHOW TABLE STATUS WHERE Name = 'MyTableName';

...ولكن للأسف، يتم اقتطاع عمود التعليق الذي يبدو أنه يحتوي على بعض هذه المعلومات، لذا لا يمكنني الاعتماد عليه.لا بد أن هناك طريقة أخرى..

سأكون سعيدًا باستدعاء C API، أو عبارة SQL، أو أي شيء - أنا فقط بحاجة إلى شيء يعمل باستمرار.

ملحوظة:لقد فكرت أيضًا في تحليل نتائج عبارة "إظهار إنشاء جدول MyTableName"، لكنني آمل حقًا أن يكون هناك شيء أبسط.

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

المحلول

هناك جدولان يمكنك الاستعلام عنهما للحصول على هذه المعلومات: INFORMATION_SCHEMA.TABLE_CONSTRAINTS و INFORMATION_SCHEMA.KEY_COLUMN_USAGE.

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

SELECT CONCAT( table_name, '.', column_name, ' -> ', 
  referenced_table_name, '.', referenced_column_name ) AS list_of_fks 
FROM INFORMATION_SCHEMA.key_column_usage 
WHERE referenced_table_schema = 'test' 
  AND referenced_table_name IS NOT NULL 
ORDER BY table_name, column_name;

استخدم اسم المخطط الخاص بك بدلاً من "test' فوق.

نصائح أخرى

وهنا كان لديك أي تحسن يذكر على حلbill:

SELECT CONSTRAINT_SCHEMA AS db,
       CONCAT (
           TABLE_NAME,
           '.',
           COLUMN_NAME,
           ' -> ',
           REFERENCED_TABLE_NAME,
           '.',
           REFERENCED_COLUMN_NAME
       ) AS relationship 
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE REFERENCED_TABLE_NAME = 'your_table_name'
ORDER BY CONSTRAINT_SCHEMA,
         TABLE_NAME,
         COLUMN_NAME;

في هذه الحالة كنت تصفية من العلاقات مع الحقول "your_table_name" ورؤية من قاعدة البيانات التي تأتي العلاقة.

وحاول INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS

SELECT TABLE_NAME,
       COLUMN_NAME,
       CONSTRAINT_NAME,
       REFERENCED_TABLE_NAME,
       REFERENCED_COLUMN_NAME 
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE REFERENCED_TABLE_NAME = 'table_name'
      AND TABLE_SCHEMA = 'table_schema';
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top