如何查看表或列的所有外键?
在MySQL中,如何获取指向特定表的所有外键约束的列表? 特定的列? 这与该Oracle问题相同,但适用于MySQL。
#1楼
发布旧答案以添加一些有用的信息。
我有一个类似的问题,但我也想看看CONSTRAINT_TYPE以及REFERENCED表和列名。 所以,
要查看表中的所有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>';
要查看架构中的所有表和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();
要查看数据库中的所有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;
如何查看表或列的所有外键?相关推荐
- mysql如何查看表拥有的键_如何查看表或列的所有外键?
白板的微信 表:SELECT TABLE_NAME,COLUMN_NAME,CONSTRAINT_NAME, REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAMEF ...
- Oracle 创建数据表以及对数据表、字段、主外键、约束的操作
选择主键的原则: 最少性 尽量选择使用单个键作为主键 稳定性 尽量选择数值更新少的列作为主键 1.创建数据表(CREATE TABLE) --创建数据表Student create table Stu ...
- MySQL表联合查询 理论基础:外键、操作关联表(一)
前言 什么是外键? 外键是指引用另一个表的一列或多列,被引用的列应该具有主键约束或唯一性约束.外键用于建立和加强两个表数据之间的连接 先创建一张班级表t_class 不会创建外键的看 https:// ...
- mysql建表时建外键约束_数据库建表时一定要设置外键约束关系吗?
如果被引用的表需要做分库分表,那么无法建立外键约束. 使用外键会降低数据库性能,这个说法并不细致.需要详细分析. 建立外键,那么一般引用字段上需要建立索引.如果不建立索引,被引用的表上删除数据,会全表 ...
- 解决MySQL在修改列时因为外键依赖出错的问题
因为 favorite_food 中的 person_id 对 person 表中的 person_id 有外键依赖关系,所以在执行 ALTER TABLE person MODIFY person_ ...
- mysql添加数据不阻塞_主键表插入数据不提交,外键表插入数据被阻塞
有客户和我说:他在含主外键的表中实验发现,在主表数据未提交,然后在外键表插入该数据数据时,出现外键表hang住现象.我开始以为是不同的会话,根据oracle数据库的一致性原则,应该新会话在外键表中不能 ...
- 数据库建表时一定要设置外键约束关系吗?
数据库建表时一定要设置外键约束关系吗? 我们都知道每张数据表都有一个能够确定每行数据唯一性的字段,也就是主键.而在关系数据库中,常常有两表存在一定关系的情况.即一张表的主键跟另一张的外键存在对应关系, ...
- hive查看表中列的信息命令_快速了解hive
作者丨HappyMint 文章选摘:大数据与人工智能 这是作者的第7篇文章 本文主要针对从事大数据分析和架构相关工作,需要与hive打交道但目前对hive还没有进行深层次了解的小伙伴,希望本文会让你对 ...
- oracle 查看表和列描述
首先给大家分享一个巨牛巨牛的人工智能教程,是我无意中发现的.教程不仅零基础,通俗易懂,而且非常风趣幽默,还时不时有内涵段子,像看小说一样,哈哈-我正在学习中,觉得太牛了,所以分享给大家!点这里可以跳转 ...
最新文章
- 5G、物联网、人工智能和机器学习将成为2021年最重要的技术
- 手动配置mysql_手动配置Mysql,无需安装的方法以及Mysql的一些基本命令
- python导入词云包失败:ImportError:cannot import name ‘WordCloud’
- 初学者学MvcMovie遇到的问题解决办法
- 这可能是这次疫情最搞笑的事情,可看着看着却鼻酸了
- msdn画圆弧函数_画直线不简单!python-matplotlib告诉你为什么
- 【AI 顶会】NIPS2019接收论文完整列表
- .ps文件怎么打开_ps界面的认识及文件的打开
- Velo 实验室集成 Chainlink 预言机喂价
- FloatingActionButton
- 傅里叶变换matlab学习笔记
- Smart Link概述
- springboot聚合工程打包报错Compilation failure浅析
- yarn 修改国内镜像
- 刺激战场国际服服务器如何修改,刺激战场国际服如何更改自己的苹果id地区-无需购买海外id...
- STM32开发GPRS传输的GPS定位器 C#编写服务器转发程序,客户端显示轨迹
- 思岚科技亮相工博会,加速技术下沉,赋能产业新发展
- clickhouse SLB 服务搭建
- JMeter学习-010-JMeter 配置元件实例之 - CSV Data Set Config 参数化配置
- php版本升级会卡吗,升级php版本到php5.5,掉坑了。。。。