在MySQL中,如何获取指向特定表的所有外键约束的列表? 特定的列? 这与该Oracle问题相同,但适用于MySQL。


#1楼

发布旧答案以添加一些有用的信息。

我有一个类似的问题,但我也想看看CONSTRAINT_TYPE以及REFERENCED表和列名。 所以,

  1. 要查看表中的所有FK,请执行以下操作:

     USE '<yourschema>'; SELECT i.TABLE_NAME, i.CONSTRAINT_TYPE, i.CONSTRAINT_NAME, k.REFERENCED_TABLE_NAME, k.REFERENCED_COLUMN_NAME FROM information_schema.TABLE_CONSTRAINTS i LEFT JOIN information_schema.KEY_COLUMN_USAGE k ON i.CONSTRAINT_NAME = k.CONSTRAINT_NAME WHERE i.CONSTRAINT_TYPE = 'FOREIGN KEY' AND i.TABLE_SCHEMA = DATABASE() AND i.TABLE_NAME = '<yourtable>'; 
  2. 要查看架构中的所有表和FK,请执行以下操作:

     USE '<yourschema>'; SELECT i.TABLE_NAME, i.CONSTRAINT_TYPE, i.CONSTRAINT_NAME, k.REFERENCED_TABLE_NAME, k.REFERENCED_COLUMN_NAME FROM information_schema.TABLE_CONSTRAINTS i LEFT JOIN information_schema.KEY_COLUMN_USAGE k ON i.CONSTRAINT_NAME = k.CONSTRAINT_NAME WHERE i.CONSTRAINT_TYPE = 'FOREIGN KEY' AND i.TABLE_SCHEMA = DATABASE(); 
  3. 要查看数据库中的所有FK,请执行以下操作:

     SELECT i.TABLE_SCHEMA, i.TABLE_NAME, i.CONSTRAINT_TYPE, i.CONSTRAINT_NAME, k.REFERENCED_TABLE_NAME, k.REFERENCED_COLUMN_NAME FROM information_schema.TABLE_CONSTRAINTS i LEFT JOIN information_schema.KEY_COLUMN_USAGE k ON i.CONSTRAINT_NAME = k.CONSTRAINT_NAME WHERE i.CONSTRAINT_TYPE = 'FOREIGN KEY'; 

记得!

这正在使用InnoDB存储引擎。 如果添加后似乎看不到任何外键,则可能是因为您的表正在使用MyISAM。

去检查:

SELECT * TABLE_NAME, ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA = '<yourschema>';

要解决此问题,请使用以下命令:

ALTER TABLE `<yourtable>` ENGINE=InnoDB;

#2楼

编辑:正如评论中指出的那样,这不是对OPs问题的正确答案,但是了解此命令很有用。 这个问题出现在Google上,是我一直在寻找的东西,并认为我会将这个答案留给其他人查找。

SHOW CREATE TABLE `<yourtable>`;

我在这里找到了这个答案: MySQL:对表命令显示约束

我之所以需要这种方式,是因为我想了解FK的工作原理,而不仅仅是查看它是否存在。


#3楼

使用以下方法列出您的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官方手册。


#4楼

该解决方案不仅将显示所有关系,而且还将显示约束名称,这在某些情况下是必需的(例如,放置约束):

selectconcat(table_name, '.', column_name) as 'foreign key',concat(referenced_table_name, '.', referenced_column_name) as 'references',constraint_name as 'constraint name'
frominformation_schema.key_column_usage
wherereferenced_table_name is not null;

如果要检查特定数据库中的表,请在查询末尾添加架构名称:

selectconcat(table_name, '.', column_name) as 'foreign key',concat(referenced_table_name, '.', referenced_column_name) as 'references',constraint_name as 'constraint name'
frominformation_schema.key_column_usage
wherereferenced_table_name is not nulland table_schema = 'database_name';

同样,对于特定的列名,添加

和table_name ='table_name

在查询末尾。

在这里受到这篇文章的启发


#5楼

如果您使用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';

#6楼

我想出的解决方案很脆弱; 它依赖Django的外键命名约定。

USE information_schema;
tee mysql_output
SELECT * FROM TABLE_CONSTRAINTS WHERE CONSTRAINT_TYPE = 'FOREIGN KEY' AND TABLE_SCHEMA = 'database_name';
notee

然后,在外壳中

grep 'refs_tablename_id' mysql_output

#7楼

对于表:

SELECT TABLE_NAME,COLUMN_NAME,CONSTRAINT_NAME, REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME
FROMINFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHEREREFERENCED_TABLE_SCHEMA = '<database>' ANDREFERENCED_TABLE_NAME = '<table>';

对于列:

SELECT TABLE_NAME,COLUMN_NAME,CONSTRAINT_NAME, REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME
FROMINFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHEREREFERENCED_TABLE_SCHEMA = '<database>' ANDREFERENCED_TABLE_NAME = '<table>' ANDREFERENCED_COLUMN_NAME = '<column>';

基本上,我们在where子句中将REFERENCED_TABLE_NAME更改为REFERENCED_COLUMN_NAME。


#8楼

作为Node答案的替代方法,如果您使用InnoDB并定义了FK,则可以查询information_schema数据库,例如:

SELECT CONSTRAINT_NAME, TABLE_NAME, REFERENCED_TABLE_NAME
FROM information_schema.REFERENTIAL_CONSTRAINTS
WHERE CONSTRAINT_SCHEMA = '<schema>'
AND TABLE_NAME = '<table>'

用于<table>中的外键,或

SELECT CONSTRAINT_NAME, TABLE_NAME, REFERENCED_TABLE_NAME
FROM information_schema.REFERENTIAL_CONSTRAINTS
WHERE CONSTRAINT_SCHEMA = '<schema>'
AND REFERENCED_TABLE_NAME = '<table>'

用于<table>的外键

如果需要,还可以获取UPDATE_RULE和DELETE_RULE。


#9楼

查找包含特定外键(例如employee_id所有表

SELECT DISTINCT TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME IN ('employee_id')
AND TABLE_SCHEMA='table_name';

#10楼

使用REFERENCED_TABLE_NAME并不总是有效,并且可以为NULL值。 以下查询可以代替:

select * from INFORMATION_SCHEMA.KEY_COLUMN_USAGE where TABLE_NAME = '<table>';

#11楼

如果您还想获取外键列的名称:

SELECT i.TABLE_SCHEMA, i.TABLE_NAME, i.CONSTRAINT_TYPE, i.CONSTRAINT_NAME, k.COLUMN_NAME, k.REFERENCED_TABLE_NAME, k.REFERENCED_COLUMN_NAME FROM information_schema.TABLE_CONSTRAINTS i LEFT JOIN information_schema.KEY_COLUMN_USAGE k ON i.CONSTRAINT_NAME = k.CONSTRAINT_NAME WHERE i.TABLE_SCHEMA = '<TABLE_NAME>' AND i.CONSTRAINT_TYPE = 'FOREIGN KEY' ORDER BY i.TABLE_NAME;

如何查看表或列的所有外键?相关推荐

  1. mysql如何查看表拥有的键_如何查看表或列的所有外键?

    白板的微信 表:SELECT TABLE_NAME,COLUMN_NAME,CONSTRAINT_NAME, REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAMEF ...

  2. Oracle 创建数据表以及对数据表、字段、主外键、约束的操作

    选择主键的原则: 最少性 尽量选择使用单个键作为主键 稳定性 尽量选择数值更新少的列作为主键 1.创建数据表(CREATE TABLE) --创建数据表Student create table Stu ...

  3. MySQL表联合查询 理论基础:外键、操作关联表(一)

    前言 什么是外键? 外键是指引用另一个表的一列或多列,被引用的列应该具有主键约束或唯一性约束.外键用于建立和加强两个表数据之间的连接 先创建一张班级表t_class 不会创建外键的看 https:// ...

  4. mysql建表时建外键约束_数据库建表时一定要设置外键约束关系吗?

    如果被引用的表需要做分库分表,那么无法建立外键约束. 使用外键会降低数据库性能,这个说法并不细致.需要详细分析. 建立外键,那么一般引用字段上需要建立索引.如果不建立索引,被引用的表上删除数据,会全表 ...

  5. 解决MySQL在修改列时因为外键依赖出错的问题

    因为 favorite_food 中的 person_id 对 person 表中的 person_id 有外键依赖关系,所以在执行 ALTER TABLE person MODIFY person_ ...

  6. mysql添加数据不阻塞_主键表插入数据不提交,外键表插入数据被阻塞

    有客户和我说:他在含主外键的表中实验发现,在主表数据未提交,然后在外键表插入该数据数据时,出现外键表hang住现象.我开始以为是不同的会话,根据oracle数据库的一致性原则,应该新会话在外键表中不能 ...

  7. 数据库建表时一定要设置外键约束关系吗?

    数据库建表时一定要设置外键约束关系吗? 我们都知道每张数据表都有一个能够确定每行数据唯一性的字段,也就是主键.而在关系数据库中,常常有两表存在一定关系的情况.即一张表的主键跟另一张的外键存在对应关系, ...

  8. hive查看表中列的信息命令_快速了解hive

    作者丨HappyMint 文章选摘:大数据与人工智能 这是作者的第7篇文章 本文主要针对从事大数据分析和架构相关工作,需要与hive打交道但目前对hive还没有进行深层次了解的小伙伴,希望本文会让你对 ...

  9. oracle 查看表和列描述

    首先给大家分享一个巨牛巨牛的人工智能教程,是我无意中发现的.教程不仅零基础,通俗易懂,而且非常风趣幽默,还时不时有内涵段子,像看小说一样,哈哈-我正在学习中,觉得太牛了,所以分享给大家!点这里可以跳转 ...

最新文章

  1. 5G、物联网、人工智能和机器学习将成为2021年最重要的技术
  2. 手动配置mysql_手动配置Mysql,无需安装的方法以及Mysql的一些基本命令
  3. python导入词云包失败:ImportError:cannot import name ‘WordCloud’
  4. 初学者学MvcMovie遇到的问题解决办法
  5. 这可能是这次疫情最搞笑的事情,可看着看着却鼻酸了
  6. msdn画圆弧函数_画直线不简单!python-matplotlib告诉你为什么
  7. 【AI 顶会】NIPS2019接收论文完整列表
  8. .ps文件怎么打开_ps界面的认识及文件的打开
  9. Velo 实验室集成 Chainlink 预言机喂价
  10. FloatingActionButton
  11. 傅里叶变换matlab学习笔记
  12. Smart Link概述
  13. springboot聚合工程打包报错Compilation failure浅析
  14. yarn 修改国内镜像
  15. 刺激战场国际服服务器如何修改,刺激战场国际服如何更改自己的苹果id地区-无需购买海外id...
  16. STM32开发GPRS传输的GPS定位器 C#编写服务器转发程序,客户端显示轨迹
  17. 思岚科技亮相工博会,加速技术下沉,赋能产业新发展
  18. clickhouse SLB 服务搭建
  19. JMeter学习-010-JMeter 配置元件实例之 - CSV Data Set Config 参数化配置
  20. php版本升级会卡吗,升级php版本到php5.5,掉坑了。。。。

热门文章

  1. Hexo博客搭建图文教程
  2. Java 核心内容相关面试题【2】
  3. apache配置文件“注解内容”全翻译
  4. 兔子未来的方向在哪里
  5. 来点硬件知识吧,今天求职吃亏了!
  6. jersey REST的接口简述
  7. struts2+spring 项目中配置tiles的解决方案
  8. Linux 内核 3.8 是给 Linux 用户的圣诞礼物
  9. MediaElement 播放本地视频文件
  10. zabbix_server执行window脚本出现中文乱码如何解决