Beperkingen tonen op commando tabellen

Ik heb tabellen waarvan ik heb geprobeerd om PK FK-relaties in te stellen, maar ik wil dit verifiëren. Hoe kan ik de PK/FK-boeien laten zien? Ik zag dezehandleiding, maar dat doet hij geen voorbeelden tonen en mijn google-zoekopdracht was ook vruchteloos. Mijn database is credentialing1en mijn beperkte tabellen zijn practicesen cred_insurances.


Antwoord 1, autoriteit 100%

Ik gebruik

SHOW CREATE TABLE mytable;

Dit toont u de SQL-instructie die nodig is om mytablein zijn huidige vorm te recreëren. U kunt alle kolommen en hun typen zien (zoals DESC), maar het toont ook informatie over beperkingen (en tabeltype, tekenset, enz.).


Antwoord 2, autoriteit 28%

Vraag gewoon de 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;

Antwoord 3, autoriteit 4%

Het grootste probleem met het gevalideerde antwoord is dat je de uitvoer moet ontleden om de informatie te krijgen. Hier is een zoekopdracht waarmee u ze op een meer bruikbare manier kunt krijgen:

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"

Antwoord 4, autoriteit 4%

afaik om een ​​verzoek te doen aan information_schemaheb je privileges nodig. Als u een eenvoudige lijst met sleutels nodig heeft, kunt u dit commando gebruiken:

SHOW INDEXES IN <tablename>

Antwoord 5

Probeer te doen:

SHOW TABLE STATUS FROM credentialing1;

De beperkingen voor externe sleutels worden vermeld in de kolom Opmerkingvan de uitvoer.


Antwoord 6

U kunt dit gebruiken:

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'

Of gebruik dit voor een beter geformatteerde uitvoer:

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'

Other episodes