动态查找带有主键的表

Posted

技术标签:

【中文标题】动态查找带有主键的表【英文标题】:Dynamically find tables with primary keys 【发布时间】:2016-09-16 12:16:46 【问题描述】:

我需要一个脚本来帮助我查找具有主键的表,而无需指定数据库名称或表名称。

【问题讨论】:

也许很有趣? Understanding the mysql Information Schema Database。另外:Chapter 22 INFORMATION_SCHEMA Tables,imo,您只需编写 SQL 查询即可找出您想要的。 【参考方案1】:
select 
    t.table_schema,t.table_name
from 
    information_schema.tables t 
    inner join information_schema .columns c  
        on t.table_schema=c.table_schema and t.table_name=c.table_name 
group by 
    t.table_schema,t.table_name   
having 
    sum(if(column_key in ('PRI','UNI'), 1,0)) =1;

这行得通。

【讨论】:

【参考方案2】:

对于 MySQL,每个主键总是有一个名为“PRIMARY”的约束。所以很容易找到它们:

SELECT TABLE_SCHEMA, TABLE_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE CONSTRAINT_NAME = 'PRIMARY';

【讨论】:

以上是关于动态查找带有主键的表的主要内容,如果未能解决你的问题,请参考以下文章

JPA:一个带有主键的表和另一个带有主键和外键的表

SQL查找两张表主键相同的数据

转载mysql主键的缺少导致备库hang

如何获取雪花中的表主键列表?

为啥我的 MySQL 表主键不会自动增加?

SQL语句获取数据库中的表主键,自增列,所有列