某些关系数据库(包括 MySQL 和 SQL Server)具有 INFORMATION_SCHEMA 系统数据库。它包含数据库元数据,例如数据库名、表名、列数据类型,甚至访问权限。它有时也称为数据字典或系统目录。无论你如何称呼它,INFORMATION_SCHEMA 数据库都是获取有关表列详细信息的理想地方。在今天的文章中,我们将使用 INFORMATION_SCHEMA 数据库来查找列是否存在以及特定表具有多少列。
在Navicat中查看 INFORMATION_SCHEMA 数据库
作为系统表,除非你明确告诉 Navicat 显示它,否则你将无法看到 INFORMATION_SCHEMA 数据库。为此,请将 INFORMATION_SCHEMA 数据库添加到数据库连接中的“数据库”列表中:
这使我们可以在表设计器或查看器中打开 Columns 表:
纯粹列数应使你对我们可以从 Columns 表中获取哪些类型的信息有所了解。
注意:INFORMATION_SCHEMA 是一个只读数据库,因此你不能对其结构或内容进行任何更改。
列数查询简介
我们可以像查询其他表一样查询 Columns 表,以查找有关表列的信息。这是基本语法:
SELECT count(*) AS anyName FROM information_schema.columns WHERE [table_schema = 'yourSchemaName' AND] table_name = 'yourTableName';
table_schema 是表所在的数据库。这对查询不是至关重要的,但是如果你有多个具有相同列名的数据库,则会将结果过滤到该特定数据库表。在要维护同一数据库的多个副本的情况下,列计数会计算所有表中具有相同名称的列。
例如,我有四个 Sakila 数据库的副本:
结果,当我在不使用 table_schema 的情况下运行查询时,我得到的列数为 51,偏高!
指定 table_schema 以得到更准确的列数 12:
如果现在在表设计器中打开 film 表,则可以确认 12 列是正确的:
确定是否存在列
在动态应用程序中,你可能希望查找有关列的信息,包括其是否存在。以下的查询列出了“title”列的每个实例和有关的元数据,包括其所属的模式和表,以及诸如默认值、数据类型和最大长度之类的详细信息:
总结
在今天的文章中,我们学习了如何利用 INFORMATION_SCHEMA 数据库来查找列是否存在以及特定表具有多少列
如果你对 Navicat Premium 感兴趣,可以免费试用 14 天!