在MySQL中,如何获得所有外键约束指向特定表的列表?一个特定的专栏?这和Oracle的问题是一样的,但是是MySQL的问题。
当前回答
编辑:正如评论中指出的,这不是OPs问题的正确答案,但了解这个命令是有用的。这个问题出现在谷歌中,这正是我所寻找的,我想我应该把这个答案留给其他人去寻找。
SHOW CREATE TABLE `<yourtable>`;
我在这里找到了答案: MySQL: show constraints on tables命令
我需要这种方式,因为我想看看FK是如何工作的,而不仅仅是看看它是否存在。
其他回答
了解更新和删除行为通常是有帮助的,这是其他答案没有提供的。现在开始。
SELECT cu.table_name,
cu.column_name,
cu.constraint_name,
cu.referenced_table_name,
cu.referenced_column_name,
IF(rc.update_rule = 'NO ACTION', 'RESTRICT', rc.update_rule) AS update_rule,-- See: https://stackoverflow.com/a/1498015/2742117
IF(rc.delete_rule = 'NO ACTION', 'RESTRICT', rc.delete_rule) AS delete_rule -- See: https://stackoverflow.com/a/1498015/2742117
FROM information_schema.key_column_usage cu
INNER JOIN information_schema.referential_constraints rc ON rc.constraint_schema = cu.table_schema
AND rc.table_name = cu.table_name
AND rc.constraint_name = cu.constraint_name
WHERE cu.referenced_table_schema = '<your schema>'
AND cu.referenced_table_name = '<your table>';
如果你使用InnoDB并定义了FK,你可以查询information_schema数据库,例如:
SELECT * FROM information_schema.TABLE_CONSTRAINTS
WHERE information_schema.TABLE_CONSTRAINTS.CONSTRAINT_TYPE = 'FOREIGN KEY'
AND information_schema.TABLE_CONSTRAINTS.TABLE_SCHEMA = 'myschema'
AND information_schema.TABLE_CONSTRAINTS.TABLE_NAME = 'mytable';
编辑:正如评论中指出的,这不是OPs问题的正确答案,但了解这个命令是有用的。这个问题出现在谷歌中,这正是我所寻找的,我想我应该把这个答案留给其他人去寻找。
SHOW CREATE TABLE `<yourtable>`;
我在这里找到了答案: MySQL: show constraints on tables命令
我需要这种方式,因为我想看看FK是如何工作的,而不仅仅是看看它是否存在。
方法列出fk(外键引用)的快速方法
KEY_COLUMN_USAGE view:
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 = (your schema name here)
AND REFERENCED_TABLE_NAME is not null
ORDER BY TABLE_NAME, COLUMN_NAME;
这个查询假设约束和所有引用和引用的表都在同一个模式中。
添加你自己的评论。
来源:mysql官方手册。
查找包含特定外键(如employee_id)的所有表
SELECT DISTINCT TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME IN ('employee_id')
AND TABLE_SCHEMA='table_name';