MySQL MyISAM如何查看表或列的所有外键TO和FROM?

时间:2019-04-08 18:09:52

标签: mysql foreign-keys myisam

如何从使用MyISAM构建的MySQL数据库中获取指向(和从)特定表和/或特定列的所有外键约束的列表?这与this InnoDB question相同,但是MyISAM特定于MySQL。

考虑标准航空公司数据集。当我基于链接的问题的接受的答案(TO)和节点的答案(FROM)运行以下两个查询时,我的结果是空集。

显示所有指向“ mytable”的外键

SELECT 
  TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME
FROM
  INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
  REFERENCED_TABLE_SCHEMA = 'airlines' AND  -- <database>
  REFERENCED_TABLE_NAME = 'airports';  -- <table> flights, carriers, planes

显示指向“ mytable”的所有外键

SELECT * FROM information_schema.TABLE_CONSTRAINTS 
WHERE information_schema.TABLE_CONSTRAINTS.CONSTRAINT_TYPE = 'FOREIGN KEY' 
AND information_schema.TABLE_CONSTRAINTS.TABLE_SCHEMA = 'airlines'
AND information_schema.TABLE_CONSTRAINTS.TABLE_NAME = 'carriers';

我误认了REFERENCED_TABLE_SCHEMA吗?此查询仅在InnoDB中有效吗?

1 个答案:

答案 0 :(得分:3)

https://dev.mysql.com/doc/refman/8.0/en/myisam-storage-engine.html说:

  

外键支持:否

不建议所有这些天都使用MyISAM。 MySQL显然正在逐步淘汰它。

另请参阅我对MyISAM versus InnoDB的回答,以很好地演示为什么我们都应该避免使用MyISAM。