तालिकाओं आदेश पर बाधाओं को दिखाएं


224

मेरे पास टेबल हैं जिन्हें मैंने पीके एफके संबंधों को स्थापित करने की कोशिश की है, लेकिन मैं इसे सत्यापित करना चाहता हूं। मैं पीके / एफके प्रतिबंध कैसे दिखा सकता हूं? मैंने इस मैनुअल पेज को देखा , लेकिन यह उदाहरण नहीं दिखाता है और मेरी Google खोज भी बेकार थी। मेरा डेटाबेस है credentialing1और मेरी विवश टेबल हैं practicesऔर cred_insurances

जवाबों:


414

मैं उपयोग करता हूं

SHOW CREATE TABLE mytable;

यह आपको एसक्यूएल स्टेटमेंट mytableको उसके वर्तमान स्वरूप में पुन: प्रस्तुत करने के लिए आवश्यक दिखाता है। आप सभी कॉलम और उनके प्रकार (जैसे DESC) देख सकते हैं, लेकिन यह आपको बाधा जानकारी (और तालिका प्रकार, चार्टसेट आदि) भी दिखाता है।


8
मुझे नहीं लगता कि यह आने वाले fk संबंधों को दर्शाता है? उदाहरण के लिए, a.col_one references b.col_oneऔर show create table bउपर्युक्त संबंध के बारे में विवरण नहीं होगा।
विनीत मेनन

1
मैंने पुष्टि की कि यह कमांड विदेशी कुंजी बाधा को प्रदर्शित नहीं करता है।
केमिन झोउ

2
खबरदार कि 10 के साथ शुरू होने वाली मारबीडी यहां अजीब परिणाम देगी। jira.mariadb.org/browse/MDEV-15377
चरण

117

बस INFORMATION_SCHEMA को क्वेरी करें:

USE INFORMATION_SCHEMA;
SELECT TABLE_NAME,
       COLUMN_NAME,
       CONSTRAINT_NAME,
       REFERENCED_TABLE_NAME,
       REFERENCED_COLUMN_NAME
FROM KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA = "<your_database_name>" 
      AND TABLE_NAME = "<your_table_name>" 
      AND REFERENCED_COLUMN_NAME IS NOT NULL;

14
यह सबसे अच्छा जवाब है क्योंकि यह आपको एक प्रारूप में परिणाम देता है जिसे आप प्रोग्रामेटिक रूप से उपयोग कर सकते हैं। बेशक आपको परिणामों को कम करने के लिए WHERE क्लॉज जोड़ने की आवश्यकता होगी
नावेद हसन

इससे मुझे एक भ्रष्ट तालिका खोजने में मदद मिली जिसमें कई विदेशी कुंजियों का संदर्भ देने वाला कॉलम 'आईडी' था। कोई आश्चर्य नहीं कि तालिका को 1452 अखंडता मिली।
विक्की टी।

यह बहुत अच्छा जवाब है! धन्यवाद @ Resh32
simhumileco

मुझे अच्छा लगता है कि आपने "बस" के साथ अपना उत्तर दिया। महान जवाब है, हालांकि!
लेविथानबर्गर

यह वास्तविक बाधा नियमों को प्रदर्शित नहीं करेगा - जैसेON UPDATE CASCADE
चरण

19

मान्य उत्तर के साथ मुख्य समस्या यह है कि आपको सुझाव प्राप्त करने के लिए आउटपुट को पार्स करना होगा। यहां एक क्वेरी है जो आपको उन्हें अधिक उपयोगी तरीके से प्राप्त करने की अनुमति देती है:

SELECT cols.TABLE_NAME, cols.COLUMN_NAME, cols.ORDINAL_POSITION,
cols.COLUMN_DEFAULT, cols.IS_NULLABLE, cols.DATA_TYPE,
    cols.CHARACTER_MAXIMUM_LENGTH, cols.CHARACTER_OCTET_LENGTH,
    cols.NUMERIC_PRECISION, cols.NUMERIC_SCALE,
    cols.COLUMN_TYPE, cols.COLUMN_KEY, cols.EXTRA,
    cols.COLUMN_COMMENT, refs.REFERENCED_TABLE_NAME, refs.REFERENCED_COLUMN_NAME,
    cRefs.UPDATE_RULE, cRefs.DELETE_RULE,
    links.TABLE_NAME, links.COLUMN_NAME,
    cLinks.UPDATE_RULE, cLinks.DELETE_RULE
FROM INFORMATION_SCHEMA.`COLUMNS` as cols
LEFT JOIN INFORMATION_SCHEMA.`KEY_COLUMN_USAGE` AS refs
ON refs.TABLE_SCHEMA=cols.TABLE_SCHEMA
    AND refs.REFERENCED_TABLE_SCHEMA=cols.TABLE_SCHEMA
    AND refs.TABLE_NAME=cols.TABLE_NAME
    AND refs.COLUMN_NAME=cols.COLUMN_NAME
LEFT JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS AS cRefs
ON cRefs.CONSTRAINT_SCHEMA=cols.TABLE_SCHEMA
    AND cRefs.CONSTRAINT_NAME=refs.CONSTRAINT_NAME
LEFT JOIN INFORMATION_SCHEMA.`KEY_COLUMN_USAGE` AS links
ON links.TABLE_SCHEMA=cols.TABLE_SCHEMA
    AND links.REFERENCED_TABLE_SCHEMA=cols.TABLE_SCHEMA
    AND links.REFERENCED_TABLE_NAME=cols.TABLE_NAME
    AND links.REFERENCED_COLUMN_NAME=cols.COLUMN_NAME
LEFT JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS AS cLinks
ON cLinks.CONSTRAINT_SCHEMA=cols.TABLE_SCHEMA
    AND cLinks.CONSTRAINT_NAME=links.CONSTRAINT_NAME
WHERE cols.TABLE_SCHEMA=DATABASE()
    AND cols.TABLE_NAME="table"

11

information_schemaआपको विशेषाधिकारों की आवश्यकता के लिए अनुरोध करने के लिए । यदि आपको कुंजी की सरल सूची चाहिए तो आप इस कमांड का उपयोग कर सकते हैं:

SHOW INDEXES IN <tablename>

कैसे कॉल कर रहा है
info_schema

6

करने की कोशिश करो:

SHOW TABLE STATUS FROM credentialing1;

विदेशी प्रमुख बाधाओं को आउटपुट के टिप्पणी कॉलम में सूचीबद्ध किया गया है ।


3
मैं टिप्पणी स्तंभ में केवल तालिका टिप्पणियां देखता हूं। यह शायद InnoDB प्रकारों के साथ कुछ करना है।
क्लॉकवर्कजेक

1
टिप्पणियाँ केवल उपयोगकर्ता टिप्पणियों के लिए हैं। यह निश्चित रूप से उस जगह के लिए नहीं है जहाँ FK परिभाषाएँ संग्रहीत हैं! यदि वे आपके लिए हैं - यह आपकी ओर से कुछ RDBMS टूल द्वारा किया गया होगा।
स्टैमस्टर

6

आप इसका उपयोग कर सकते हैं:

select
    table_name,column_name,referenced_table_name,referenced_column_name
from
    information_schema.key_column_usage
where
    referenced_table_name is not null
    and table_schema = 'my_database' 
    and table_name = 'my_table'

या बेहतर स्वरूपित आउटपुट के लिए इसका उपयोग करें:

select
    concat(table_name, '.', column_name) as 'foreign key',  
    concat(referenced_table_name, '.', referenced_column_name) as 'references'
from
    information_schema.key_column_usage
where
    referenced_table_name is not null
    and table_schema = 'my_database' 
    and table_name = 'my_table'

ORA-00942: तालिका या दृश्य 00942 मौजूद नहीं है। 00000 - "तालिका या दृश्य मौजूद नहीं है" * कारण: * क्रिया: पंक्ति में त्रुटि: 29 स्तंभ: 5 पंक्ति 29 "
सूचना_केमे.के ._______

2
@noboundaries आप कोशिश कर रहे हैं कि Oracle पर, सवाल MySQL के बारे में है
ymajoros

1

@ Resh32 के अनुरूप , लेकिन USEबयान का उपयोग करने की आवश्यकता के बिना :

SELECT TABLE_NAME,
       COLUMN_NAME,
       CONSTRAINT_NAME,
       REFERENCED_TABLE_NAME,
       REFERENCED_COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA = "database_name" 
      AND TABLE_NAME = "table_name" 
      AND REFERENCED_COLUMN_NAME IS NOT NULL;

ओआरएम का उपयोग करते हुए उपयोगी, जैसे।


यह वास्तविक बाधा नियमों को प्रदर्शित नहीं करेगा - जैसेON UPDATE CASCADE
चरण

0

एक उपकरण भी है जिसे दैवज्ञ mysqlshow कहते हैं

यदि आप इसे --k keys $table_nameविकल्प के साथ चलाते हैं तो यह कुंजियों को प्रदर्शित करेगा।

SYNOPSIS
   mysqlshow [options] [db_name [tbl_name [col_name]]]
.......
.......
.......
·   --keys, -k
   Show table indexes.

उदाहरण:

╰─➤  mysqlshow -h 127.0.0.1 -u root -p --keys database tokens
Database: database  Table: tokens
+-----------------+------------------+--------------------+------+-----+---------+----------------+---------------------------------+---------+
| Field           | Type             | Collation          | Null | Key | Default | Extra          | Privileges                      | Comment |
+-----------------+------------------+--------------------+------+-----+---------+----------------+---------------------------------+---------+
| id              | int(10) unsigned |                    | NO   | PRI |         | auto_increment | select,insert,update,references |         |
| token           | text             | utf8mb4_unicode_ci | NO   |     |         |                | select,insert,update,references |         |
| user_id         | int(10) unsigned |                    | NO   | MUL |         |                | select,insert,update,references |         |
| expires_in      | datetime         |                    | YES  |     |         |                | select,insert,update,references |         |
| created_at      | timestamp        |                    | YES  |     |         |                | select,insert,update,references |         |
| updated_at      | timestamp        |                    | YES  |     |         |                | select,insert,update,references |         |
+-----------------+------------------+--------------------+------+-----+---------+----------------+---------------------------------+---------+
+--------+------------+--------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table  | Non_unique | Key_name                 | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+--------+------------+--------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| tokens | 0          | PRIMARY                  | 1            | id          | A         | 2           |          |        |      | BTREE      |         |               |
| tokens | 1          | tokens_user_id_foreign   | 1            | user_id     | A         | 2           |          |        |      | BTREE      |         |               |
+--------+------------+--------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.