MySQL中如何找到包含某些字段的所有表

卡拉先生
发布于 2020年09月07日 | 上次编辑:2020年09月07日

header

今天在 Stackoverflow 上看到了这个有趣的问题:如何在 MySQL 中找到所有含有特定列(字段)的表?

举个例子,假设对于 age 这个列来说,你需要知道你的数据库里所有含有 age 的表是什么。

碰到这个问题的场景其实很多:

  1. 你的表过多,现在同事拿着一个列问你这个列的平均值,而你已经忘了这个列所在的表
  2. 查看各个表中,是否有名字重复的列

等等

如果你在尝试构建搜索功能,可以尝试卡拉搜索,无需配置维护即可实现毫秒级搜索,后台可轻松控制排序算法让运营和产品可以轻松调整,降低开发负担

如何实现查找包含列字段的所有表名

首先,假设你得到这些列名需要复制出来,建议像这样启动 MySQL 命令行

$ mysql -sN -u root -p

这里的 -sN 选项会将头信息之类的内容去掉,方便复制。接下来,用这个查询

SELECT DISTINCT TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME IN ('column1', 'column2')
AND TABLE_SCHEMA='your_database_name';

这里的 column1column2 就是你想查询的字段名(列名)。

实例

比如说,我希望在我的 production 数据库里,所有的数据库表中寻找一个名为 age 的列,我会这样查询:

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

返回的内容大致为

+-----------------------------------+
| TABLE_NAME                        |
+-----------------------------------+
| players                           |
| users                             |

显然,根据你的查询不同,你的结果也会不一样。

总结

本文中我们讨论了如何查找所有在 MySQL 数据表中,含有特定列名的表。如果你常用 MySQL 且需要构建搜索功能的话,可以尝试卡拉搜索 API,几行代码就可以接入,可以极大程序免去搭建和维护 ES 的烦恼。

扩展阅读

MySQL如何创建新用户并授权

理解关系型数据库

MySQL主键用 UUID 还是 INT

本文参考

https://stackoverflow.com/questions/193780/how-to-find-all-the-tables-in-mysql-with-specific-column-names-in-them

https://alvinalexander.com/mysql/how-to-find-column-field-names-in-all-database-mysql-tables/

https://winashwin.wordpress.com/2012/08/28/mysql-search/

友情链接更新日志© 2020, 卡拉搜索, Built with ❤️ in San Francisco + Beijing

京ICP备15049164号-3