如何找到 MySQL 中所有具有特定列名的表?
我有 2-3 个不同的列名,我想在整个数据库中查找它们并列出具有这些列的所有表。 有没有简单的脚本?
I have 2-3 different column names that I want to look up in the entire database and list out all tables which have those columns. Is there any easy script?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(11)
要获取数据库
YourDatabase
中包含列columnA
或ColumnB
的所有表:To get all tables with columns
columnA
orColumnB
in the databaseYourDatabase
:更简单地用一行 SQL 完成:
More simply done in one line of SQL:
在较旧的 MySQL 版本或某些没有
information_schema
的 MySQL NDB Cluster 版本中,您可以转储表结构并手动搜索列。现在使用您喜欢的文本编辑器搜索
some_file.sql
中的列名称,或者使用一些漂亮的 AWK 脚本。以及一个简单的 sed 脚本来查找该列。 只需将 COLUMN_NAME 替换为您的:
您可以直接在 sed 中通过管道传输转储,但这很简单。
In older MySQL versions or some MySQL NDB Cluster versions that do not have
information_schema
, you can dump the table structure and search the column manually.Now search the column name in
some_file.sql
using your preferred text editor, or use some nifty AWK scripts.And a simple sed script to find the column. Just replace COLUMN_NAME with yours:
You can pipe the dump directly in sed, but that's trivial.
对于那些搜索相反的内容,即寻找不包含特定列名的表,这是查询...
当我们开始慢慢实现使用 InnoDB 的特殊
ai_col 列,需要找出 200 个表中哪些表尚未升级。
For those searching for the inverse of this, i.e. looking for tables that do not contain a certain column name, here is the query...
This came in really handy when we began to slowly implement use of InnoDB's special
ai_col
column and needed to figure out which of our 200 tables had yet to be upgraded.使用这一行查询。 将 desired_column_name 替换为您的列名称。
Use this one line query. Replace desired_column_name by your column name.
如果您想“仅获取所有表”,则使用此查询:
如果您想“获取所有包含列的表”,则使用此查询:
If you want to "get all tables only", then use this query:
If you want "to get all tables with columns", then use this query:
^^ 将获得具有 ColumnA 和 ColumnB 的表格,而不是像接受的答案那样具有 ColumnA 或 ColumnB
That ^^ will get the tables with ColumnA and ColumnB instead of ColumnA or ColumnB like the accepted answer
information_schema 的问题是它可能非常慢。 使用 SHOW 命令速度更快。
选择数据库后,首先发送查询 SHOW TABLES。 然后对每个表执行 SHOW COLUMNS。
在 PHP 中,看起来像这样
The problem with information_schema is that it can be terribly slow. It is faster to use the SHOW commands.
After you select the database you first send the query SHOW TABLES. And then you do SHOW COLUMNS for each of the tables.
In PHP that would look something like