Navicat 博客

获取有关数据库表列的元数据 2020 年 9 月 22 日,由 Robert Gravelle 撰写

某些关系数据库(包括 MySQL 和 SQL Server)具有 INFORMATION_SCHEMA 系统数据库。它包含数据库元数据,例如数据库名、表名、列数据类型,甚至访问权限。它有时也称为数据字典或系统目录。无论你如何称呼它,INFORMATION_SCHEMA 数据库都是获取有关表列详细信息的理想地方。在今天的文章中,我们将使用 INFORMATION_SCHEMA 数据库来查找列是否存在以及特定表具有多少列。

Navicat中查看 INFORMATION_SCHEMA 数据库

作为系统表,除非你明确告诉 Navicat 显示它,否则你将无法看到 INFORMATION_SCHEMA 数据库。为此,请将 INFORMATION_SCHEMA 数据库添加到数据库连接中的“数据库”列表中:

edit_connection_dialog (75K)

这使我们可以在表设计器或查看器中打开 Columns 表:

INFORMATION_SCHEMA_columns_table (250K)

纯粹列数应使你对我们可以从 Columns 表中获取哪些类型的信息有所了解。

注意:INFORMATION_SCHEMA 是一个只读数据库,因此你不能对其结构或内容进行任何更改。

列数查询简介

我们可以像查询其他表一样查询 Columns 表,以查找有关表列的信息。这是基本语法:

SELECT count(*) AS anyName FROM information_schema.columns 
WHERE [table_schema = 'yourSchemaName' AND] 
table_name = 'yourTableName'; 

table_schema 是表所在的数据库。这对查询不是至关重要的,但是如果你有多个具有相同列名的数据库,则会将结果过滤到该特定数据库表。在要维护同一数据库的多个副本的情况下,列计数会计算所有表中具有相同名称的列。

例如,我有四个 Sakila 数据库的副本:

MySQl_connection_databases (24K)

结果,当我在不使用 table_schema 的情况下运行查询时,我得到的列数为 51,偏高!

select_column_count_of_film_table (34K)

指定 table_schema 以得到更准确的列数 12:

select_column_count_of_film_table_with_schema (40K)

如果现在在表设计器中打开 film 表,则可以确认 12 列是正确的:

film_table_design (87K)

确定是否存在列

在动态应用程序中,你可能希望查找有关列的信息,包括其是否存在。以下的查询列出了“title”列的每个实例和有关的元数据,包括其所属的模式和表,以及诸如默认值、数据类型和最大长度之类的详细信息:

finding_column_info (166K)

总结

在今天的文章中,我们学习了如何利用 INFORMATION_SCHEMA 数据库来查找列是否存在以及特定表具有多少列

如果你对 Navicat Premium 感兴趣,可以免费试用 14 天!

Navicat 文章
频道条目
分享
文章归档