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 credentialing1
en mijn beperkte tabellen zijn practices
en cred_insurances
.
Antwoord 1, autoriteit 100%
Ik gebruik
SHOW CREATE TABLE mytable;
Dit toont u de SQL-instructie die nodig is om mytable
in 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_schema
heb 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'