当前位置: 首页 > news >正文

information_schema是什么?

前言

在现代数据驱动的应用开发中,理解和管理数据库结构变得尤为重要。几乎所有的SQL数据库管理系统(DBMS)都提供了一个名为 information_schema 的虚拟数据库。它不仅是一个了解数据库内部结构的强大工具,也是一个实现跨平台兼容性的关键。

什么是 information_schema

information_schema 是一个标准化、只读的虚拟数据库,存在于所有基于SQL的数据库系统中,如MySQL、MariaDB、PostgreSQL等。它不是一个传统的物理数据库,而是一系列由数据库服务器根据当前数据库状态动态生成的视图。通过查询 information_schema 中的表,用户可以获取有关数据库对象(如表、列、索引、视图、存储过程等)的详细信息。

information_schema 的主要功能与作用
  • 统一接口:为不同数据库系统提供了一致的访问方式,使得相同的查询可以在多个数据库平台上运行。
  • 元数据访问:允许用户查询有关数据库结构的信息,包括表名、列名、数据类型、约束条件等。
  • 权限管理:提供关于用户权限和访问控制的信息,有助于安全审计和权限配置。
  • 优化性能:帮助数据库管理员识别潜在的性能瓶颈,例如通过分析索引使用情况或查询执行计划。
  • 支持数据库迁移:当需要将应用程序从一个数据库迁移到另一个时,information_schema 提供了必要的信息来确保迁移的成功。
  • 自动化和脚本编写:利用 information_schema 可以创建自动化的数据库维护脚本,简化日常任务。
  • 文档化和知识传递:定期查询 information_schema 并将其结果导出为文档,可以帮助团队成员更好地理解数据库结构,促进协作和知识传递。
information_schema 中的重要表及其用途

以下是几个 information_schema 中最常用且重要的表,并附带更详细的说明:

  • TABLES

    • 描述:包含有关数据库中所有表的信息。
    • 主要字段
      • TABLE_CATALOG:表所属的目录名称。
      • TABLE_SCHEMA:表所在的模式(数据库)名称。
      • TABLE_NAME:表的名称。
      • TABLE_TYPE:表的类型(基表、视图等)。
      • ENGINE:使用的存储引擎(如InnoDB、MyISAM)。
      • TABLE_COMMENT:表的注释。
    • 应用场景:用于获取特定模式下的所有表列表,或者查找具有特定属性的表。对于数据库设计审查非常有用。
  • COLUMNS

    • 描述:列出每个表的所有列及其属性。
    • 主要字段
      • TABLE_CATALOGTABLE_SCHEMATABLE_NAME:标识表的位置。
      • COLUMN_NAME:列的名称。
      • DATA_TYPE:列的数据类型。
      • CHARACTER_MAXIMUM_LENGTH:字符类型的最大长度。
      • IS_NULLABLE:是否允许NULL值。
      • COLUMN_DEFAULT:默认值。
      • COLUMN_COMMENT:列的注释。
    • 应用场景:用于获取某个表内所有列的详细信息,对于理解表结构至关重要。还可以用来检查列定义的一致性和准确性。
  • SCHEMATA

    • 描述:展示所有模式(或数据库)的信息。
    • 主要字段
      • CATALOG_NAME:模式所属的目录名称。
      • SCHEMA_NAME:模式的名称。
      • DEFAULT_CHARACTER_SET_NAME:默认字符集。
      • DEFAULT_COLLATION_NAME:默认排序规则。
    • 应用场景:用于获取系统中存在的所有模式,并了解它们的基本设置。这对于多租户应用或复杂的企业级数据库环境非常重要。
  • ROUTINES

    • 描述:记录存储过程和函数的细节。
    • 主要字段
      • SPECIFIC_NAME:唯一的名称。
      • ROUTINE_CATALOGROUTINE_SCHEMAROUTINE_NAME:标识存储过程或函数的位置。
      • ROUTINE_TYPE:是存储过程还是函数。
      • DATA_TYPE:返回值的数据类型。
      • PARAMETER_MODEPARAMETER_NAMEDTD_IDENTIFIER:参数信息。
    • 应用场景:用于管理和调试存储过程及函数,确保代码库的一致性和正确性。这对于维护大型数据库应用尤其重要。
  • STATISTICS

    • 描述:提供关于表索引的统计信息。
    • 主要字段
      • TABLE_CATALOGTABLE_SCHEMATABLE_NAME:标识表的位置。
      • NON_UNIQUE:是否允许重复键。
      • INDEX_SCHEMAINDEX_NAME:索引的位置和名称。
      • SEQ_IN_INDEX:索引中列的顺序。
      • COLUMN_NAME:索引所涉及的列。
      • CARDINALITY:基数,即唯一值的数量。
      • SUB_PART:部分索引(前缀索引)的长度。
      • PACKED:索引是否被压缩。
      • NULLABLE:索引列是否允许NULL值。
      • INDEX_TYPE:索引类型(BTREE、HASH等)。
    • 应用场景:对于优化查询性能非常有用,特别是在选择合适的索引来加速查询方面。可以帮助数据库管理员识别性能瓶颈并采取相应的优化措施。
  • KEY_COLUMN_USAGE

    • 描述:描述了表中键(主键、外键等)的使用情况。
    • 主要字段
      • CONSTRAINT_CATALOGCONSTRAINT_SCHEMACONSTRAINT_NAME:标识约束的位置。
      • TABLE_CATALOGTABLE_SCHEMATABLE_NAME:标识表的位置。
      • COLUMN_NAME:键所涉及的列。
      • REFERENCED_TABLE_SCHEMAREFERENCED_TABLE_NAMEREFERENCED_COLUMN_NAME:外键引用的目标表和列。
    • 应用场景:对于理解表间关系至关重要,尤其是在进行数据库设计审查或重构时。有助于确保数据完整性和一致性。
高级应用与技巧
  • 跨数据库兼容性:利用 information_schema 可以编写出对多种数据库都适用的SQL语句,提高代码的可移植性。
  • 自动化脚本:结合编程语言(如Python、Perl),可以通过查询 information_schema 自动生成创建表的SQL脚本,简化数据库部署流程。
  • 数据库文档化:定期查询 information_schema 并将其结果导出为文档,可以帮助团队成员更好地理解数据库结构,促进协作。
  • 性能调优:深入分析 STATISTICSKEY_COLUMN_USAGE 等表中的信息,可以帮助识别性能瓶颈并采取相应的优化措施。
  • 变更管理:在数据库结构发生变化时,利用 information_schema 进行前后对比,确保变更不会影响现有业务逻辑。
  • 安全性审计:通过查询 USER_PRIVILEGESSCHEMA_PRIVILEGES 表,可以审查用户的权限分配,确保符合最小权限原则。
实际案例

假设我们有一个名为 dev 的数据库,想要获取其中所有表及其字段的相关注释信息,我们可以构造如下SQL查询:

SELECT t.table_name, t.table_comment, c.column_name, c.column_comment
FROM information_schema.tables AS t
JOIN information_schema.columns AS c ON t.table_name = c.table_name
WHERE t.table_schema = 'dev';

此查询将返回四个字段:表名 (t.table_name)、表的注释 (t.table_comment)、列名 (c.column_name) 以及列的注释 (c.column_comment)。这对于我们快速了解数据库结构及其设计意图非常有帮助。

结论

information_schema 不仅是数据库系统的内置工具,更是开发人员和数据库管理员手中的利器。


注意:虽然 information_schema 在概念上是标准化的,但各数据库供应商可能会对其内容和行为有所扩展或限制。

相关文章:

information_schema是什么?

前言 在现代数据驱动的应用开发中,理解和管理数据库结构变得尤为重要。几乎所有的SQL数据库管理系统(DBMS)都提供了一个名为 information_schema 的虚拟数据库。它不仅是一个了解数据库内部结构的强大工具,也是一个实现跨平台兼容…...

案例分析-THC7984设计问题报告

目录 简介 配置信息 结论: 简介 使用的环境 AD芯片:THC7984 VGA信号:通过电脑主机产生1024x768 60HZ信号。 配置信息 AD数字数字产生通过FPGA接收。 AD寄存器配置(第一个数数据,第二个是地址): iic_write_reg 1 0x1e iic_write_reg 02 0x5...

HarmonyOS NEXT 技术实践-基于基础视觉服务的多目标识别

在智能手机、平板和其他智能设备日益智能化的今天,视觉识别技术成为提升用户体验和智能交互的重要手段。HarmonyOS NEXT通过基础视觉服务(HMS Core Vision)提供了一套强大的视觉识别功能,其中多目标识别作为其关键技术之一&#x…...

【python】银行客户流失预测预处理部分,独热编码·标签编码·数据离散化处理·数据筛选·数据分割

数据预处理 通过网盘分享的文件:银行流失预测数据和代码 链接: https://pan.baidu.com/s/1loiB8rMvZArfjJccu4KW6w?pwdpfcs 提取码: pfcs 非数值特征处理 目的:将非数值特征转换为数值型,以便模型能够处理。方法: 地理位置&am…...

使用 docker ps 查不到刚刚创建的容器

问题描述 docker创建mysql容器并实现本地目录挂载,虽然创建成功了,但是查看容器却不存在,删除重新创建还是同样的问题。 原因分析: 因为做本地目录挂载的时候在宿主机中创建了相关文件夹,并且还预先把数据库文件丢…...

vue2+element 前端表格下载

前台下载table表格 可下载fixed columns和普通平铺的表格 exportExcel() {const tableContainer document.querySelector(#table)const fixflg tableContainer ? tableContainer.querySelector(.el-table__fixed) : null// const fixflg document.querySelector(.el-table_…...

MySQL使用LOAD DATA INFILE方式导入文本文件

【图书推荐】《MySQL 9从入门到性能优化(视频教学版)》-CSDN博客 《MySQL 9从入门到性能优化(视频教学版)(数据库技术丛书)》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) MySQL9数据库技术_夏天又到了…...

【从零开始入门unity游戏开发之——unity篇02】unity6基础入门——软件下载安装、Unity Hub配置、安装unity编辑器、许可证管理

文章目录 一、软件下载安装1、Unity官网2、下载Unity Hub 二、修改Unity Hub配置1、设置Unity Hub中文语言2、修改默认存储目录 三、安装unity编辑器1、点击安装编辑器2、版本选择3、关于版本号4、安装模块选择5、等待下载完成自动安装即可6、追加unity和模块 四、许可证管理专…...

SpringBootWeb 篇-深入了解 SpringBoot + Vue 的前后端分离项目部署上线与 Nginx 配置文件结构

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 云服务器的准备 2.0 Xshell 和 Xftp 软件 2.1 Xshell 介绍 2.2 Xftp 介绍 3.0 在云服务器进行环境配置 3.1 安装 JDK 3.2 安装 MySQL 3.3 安装 Nginx 4.0 SpringB…...

优化程序中的数据:从代数到向量解

前言 在前文笔者简单介绍了把数据迭代抽象为线性代数,并介绍了空间体、维度等概念。 数据复用 数据复用是一种提高程序执行效率与数据局部性的方法,分为自复用与组复用, 自复用:如果多个迭代访问同一个内存位置,那…...

【Web】2024“国城杯”网络安全挑战大赛决赛题解(全)

最近在忙联通的安全准入测试,很少有时间看CTF了,今晚抽点时间回顾下上周线下的题(期末还没开始复习😢) 感觉做渗透测试一半的时间在和甲方掰扯&水垃圾洞,没啥惊喜感,还是CTF有意思 目录 Mountain ez_zhuawa 图…...

基于ceres优化的3d激光雷达开源算法

以下是一些基于CERES优化的开源激光雷达SLAM或相关算法: (1) LOAM (Lidar Odometry And Mapping) 简介: LOAM是一种经典的激光雷达里程计和建图算法,它通过提取特征点(角点和平面点),利用ICP(Iterative Cl…...

【FAQ】HarmonyOS SDK 闭源开放能力 — Vision Kit(2)

1.问题描述: 人脸活体检测返回上一页App由沉浸式变为非沉浸式多了上下安全区域。 解决方案: 检测结束后需要自己去设置沉浸式配置。 2.问题描述: Vision Kit文字识别是本地识别,还是上传至服务器,由服务器来识别文…...

【LeetCode】726、原子的数量

【LeetCode】726、原子的数量 文章目录 一、递归: 嵌套类问题1.1 递归: 嵌套类问题 二、多语言解法 一、递归: 嵌套类问题 1.1 递归: 嵌套类问题 遇到 ( 括号, 则递归计算子问题 遇到大写字母, 或遇到 ( 括号, 则清算历史, 并开始新的记录 记录由两部分组成: 大写字母开头的 …...

VMware虚拟机三种网络工作模式

vmware为我们提供了三种网络工作模式,它们分别是:Bridged(桥接模式)、NAT(网络地址转换模式)、Host-Only(仅主机模式)。 打开vmware虚拟机,我们可以在选项栏的“编辑”下的“虚拟网络编辑器”中看到VMnet0(桥接模式)、VMnet1(仅主机模式)、VMnet8(NAT模式),那…...

14-zookeeper环境搭建

0、环境 java:1.8zookeeper:3.5.6 1、下载 zookeeper下载点击这里。 2、安装 下载完成后解压,放到你想放的目录里。先看一下zookeeper的目录结构,如下图: 进入conf目录,复制zoo_sample.cfg&#xff0…...

[搜广推]王树森推荐系统笔记——矩阵补充最近邻查找

视频合集链接 矩阵补充(工业界不常用) 模型结构 embedding可以把 用户ID 或者 物品ID 映射成向量输入用户ID 和 物品ID,输出向量的内积(一个实数),内积越大说明用户对这个物品越感兴趣模型中的两个embed…...

Unity3D * 粒子特效 * Particle System

(基于阿发教程做的重点笔记) 粒子 用于模拟一些流动的,没有形状的物质,例如 液体,烟雾,火焰,爆炸,魔法等效果 去除粒子外框 particle system 粒子发生器,有1个主模块和22个子模块&#xff0…...

【基础篇】1. JasperSoft Studio编辑器与报表属性介绍

编辑器介绍 Jaspersoft Studio有一个多选项卡编辑器,其中包括三个标签:设计,源代码和预览。 Design:报表设计页面,可以图形化拖拉组件设计报表,打开报表文件的主页面Source:源代码页码&#xff…...

数据结构:算法篇:快速排序;直接插入排序

目录 快速排序 直接插入排序 改良版冒泡排序 快速排序 理解: ①从待排序元素中选定一个基准元素; ②以基准元素将数据分为两部分:(可以将:大于基准元素放左,小于基准元素放右) ③对左半部分…...

WebAPI编程(第一天,第二天)

WebAPI编程(第一天,第二天) day01 - Web APIs 1.1. Web API介绍 1.1.1 API的概念1.1.2 Web API的概念1.1.3 API 和 Web API 总结 1.2. DOM 介绍 1.2.1 什么是DOM1.2.2. DOM树 1.3. 获取元素 1.3.1. 根据ID获取1.3.2. 根据标签名获取元素1.3.…...

查看MySQL存储引擎方法,表操作

修改数据库表存储引擎 show create table dept; show table status from itpux where name s2\G; select * from information_schema.TABLES where table_schemaitpux and table_names3; 查询整个mysql里面存储引擎是innodb/myisam的表 建表时候要写好存储引擎 -- 创建表 -- 表…...

【Python教程】Python3基础篇之Number(数字)

博主介绍:✌全网粉丝21W+,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物联网、机器学习等设计与开发。 感兴趣的可…...

基于openEuler22.09部署OpenStack Yoga云平台(一)

OpenStack Yoga部署 安装OpenStack 一、基础准备 基于OpenStack经典的三节点环境进行部署,三个节点分别是控制节点(controller)、计算节点(compute)、存储节点(storage),其中存储…...

I.MX6U 启动方式详解

一、启动方式选择 BOOT 的处理过程是发生在 I.MX6U 芯片上电以后,芯片会根据 BOOT_MODE[1:0]的设置 来选择 BOOT 方式。 BOOT_MODE[1:0]的值是可以改变的,有两种方式,一种是改写 eFUSE(熔 丝),一种是修改相应的 GPIO 高低电平。第一种修改 eFUSE 的方式只能修改一次,后面就…...

施耐德变频器ATV320系列技术优势:创新与安全并重

在工业自动化领域,追求高效、安全与智能已成为不可阻挡的趋势。施耐德变频器ATV320系列凭借其强大的设计标准和全球认证,成为能够帮助企业降低安装成本,提高设备性能的创新解决方案。 【全球认证,品质保障】ATV320 系列秉持施耐德…...

系统思考—全局思维

昨天接到一个企业需求,某互联网公司VP希望N-1的核心团队一起学习系统思考,特别是在新业务快速发展的阶段。公司增长势头不错,但如何解决跨部门的协作问题,成为了瓶颈。全局思维就是关键。产品、技术、市场、运营、客服……如何打破…...

Windows如何切换用户访问局域网共享文件夹,如何切换网上邻居的账户

Windows如何切换用户访问局域网共享文件夹,如何切换网上邻居的账户 查看共享连接 使用net use命令可以查看当前已经建立的共享连接。net use删除共享连接 使用net use * /del 或net use * /delete命令可以删除所有当前的共享连接。net use * /delnet use * /delete如果只想删除…...

如何在谷歌浏览器中启用语音搜索

想象一下,你正在拥挤的地铁上,双手都拿着沉重的购物袋,突然你想搜索附近的咖啡馆。此时如果你能通过语音而不是打字来进行搜索,那将多么的便利!在谷歌浏览器中,启用语音搜索功能就是这么简单而高效&#xf…...

HarmonyOS NEXT 技术实践-基于基础视觉服务实现骨骼点识别

本示例展示了如何在HarmonyOS Next中实现基于基础视觉服务的骨骼点识别功能。骨骼点识别是计算机视觉中的一项重要技术,广泛应用于运动分析、健身监控和增强现实等领域。通过使用HarmonyOS Next提供的视觉API,开发者能够轻松地对人物图像进行骨骼点检测&…...