INFORMATION_SCHEMA获取数据库的信息

简介

information_schema这张数据表保存了MySQL服务器所有数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。再简单点,这台mysql服务器上,到底有哪些数据库、各个数据库有哪些表,每张表的字段类型是什么,各个数据库要什么权限才能访问,等等信息都保存在information_schema表里面。

Mysql的INFORMATION_SCHEMA数据库包含了一些表和视图,提供了访问数据库元数据的方式。

元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。有些时候用于表述该信息的其他术语包括“数据词典”和“系统目录”。

下面对一些重要的数据字典表做一些说明:

SCHEMATA表:提供了关于数据库的信息。

TABLES表:给出了关于数据库中的表的信息。

COLUMNS表:给出了表中的列信息。

STATISTICS表:给出了关于表索引的信息。

USER_PRIVILEGES表:给出了关于全程权限的信息。该信息源自mysql.user授权表。

SCHEMA_PRIVILEGES表:给出了关于方案(数据库)权限的信息。该信息来自mysql.db授权表。

TABLE_PRIVILEGES表:给出了关于表权限的信息。该信息源自mysql.tables_priv授权表。

COLUMN_PRIVILEGES表:给出了关于列权限的信息。该信息源自mysql.columns_priv授权表。

CHARACTER_SETS表:提供了关于可用字符集的信息。

COLLATIONS表:提供了关于各字符集的对照信息。

COLLATION_CHARACTER_SET_APPLICABILITY表:指明了可用于校对的字符集。

TABLE_CONSTRAINTS表:描述了存在约束的表。

KEY_COLUMN_USAGE表:描述了具有约束的键列。

ROUTINES表:提供了关于存储子程序(存储程序和函数)的信息。此时,ROUTINES表不包含自定义函数(UDF)。

VIEWS表:给出了关于数据库中的视图的信息。

TRIGGERS表:提供了关于触发程序的信息。


例1:

SELECT table_name, table_type, engine

FROM information_schema.tables

WHERE table_schema = ‘db5’

ORDER BY table_name DESC;

解释:该语句请求按逆向字母顺序列出数据库db5中的所有表,但仅显示三种信息:表名,表类型,以及表引擎。

INFORMATION_SCHEMA是信息数据库,其中保存着关于MySQL服务器所维护的所有其他数据库的信息。在INFORMATION_SCHEMA中,有数个只读表。它们实际上是视图,而不是基本表,因此,你将无法看到与之相关的任何文件。

每位MySQL用户均有权访问这些表,但仅限于表中的特定行,在这类行中含有用户具有恰当访问权限的对象。


例2:查询数据库中表是否存在

select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA=’stat1’ and TABLE_NAME=’user_active’; 
TABLES表:给出了关于数据库中的表的信息。 
table_schema:数据库名 
table_name:表名 
如果stat1库的user_active表存在,那么就会返回值 
可以用户检测数据库中表是否存在


例3:查看表中是否存在指定列

select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_SCHEMA=’stat1’ and TABLE_NAME=’user_active ’ and COLUMN_NAME=’openid’; 
COLUIMNS:数据库表中的列信息 
column_name:列名 
查看数据库表中是否存在改列名 
如果stat1库,user_active表有openid列,那么就会返回改列.


例4:查看一个库中有多少表

>select count(*)  from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA=‘stat1‘;
查询数据库stat1中有多少表
时间: 2024-08-09 02:19:09

INFORMATION_SCHEMA获取数据库的信息的相关文章

查询Master下的系统表和系统视图获取数据库的信息和简单的渗透测试

在SQL中可以通过查询Master下的系统表(sys)和系统视图(information_schema)获取数据库的信息.SQL2000和SQL2005的结构略有不同. 系统表结构参考系统表详细说明. 系统信息结构图参考:http://dev.mysql.com/doc/refman/5.1/zh/information-schema.html 1.2000下操作: 系统表目录:大部分以dbo.sys为前缀. 系统视图目录:有20个常用的视图,以INFORMATION_SCHEMA为前缀. 在2

一键获取数据库整体信息脚本

一键获取数据库整体信息脚本将脚本内容放spooldb.sql中,在sqlplus中执行,相关信息会自动生成5个文件,其中addm是最近一小时文件,ash是最近半小时文件,而awr文件是最近一小时和最近7天的两个文件. SET markup html ON spool ON pre off entmap off set term off set heading on set verify off set feedback off set linesize 2000 set pagesize 300

SQL 获取数据库表信息

一个服务器中所有的数据库 SELECT * FROM Master..SysDatabases ORDER BY Name 一个数据库中所有的表 SELECT * FROM sysobjects  WHERE xtype='u' 一个表的说明信息 SELECT * FROM sys.extended_properties a left JOIN  sysobjects b ON a.major_id=b.id WHERE b.name='Log' --and a.minor_id =0 orde

Delphi中客户端获取数据库更新信息(更新条数)

1.SQL语句 if not exists ( select 1 from tb where xxx='XXX') //不存在,则插入数据 begin insert into tb(xxx) values('XXX') //这里自己定义,插入或更新都可以 end select top 1 @@rowcount as RC //关键是这个语句,读取更新的信息 2.客户端获取更新情况,我这里用Clientdataset. with cds do begin commandtext:=sql ;//这

【java 获取数据库信息】获取MySQL或其他数据库的详细信息

1.首先是 通过数据库获取数据表的详细列信息 1 package com.sxd.mysqlInfo.test; 2 3 import java.sql.Connection; 4 import java.sql.DatabaseMetaData; 5 import java.sql.DriverManager; 6 import java.sql.PreparedStatement; 7 import java.sql.ResultSet; 8 import java.sql.ResultSe

百度地图的使用之获取数据库表中信息的坐标点显示在地图上

//通用封装好的js: var map = new BMap.Map("container"); //建树Map实例 var point = new BMap.Point(103.976032, 33.845509); // 建树点坐标 map.centerAndZoom(point, 6); // 初始化地图,设置中心点坐标和地图级别. //地图事件设置函数: map.enableDragging(); //启用地图拖拽事件,默认启用(可不写) map.enableScrollWhe

通过Hibernate配置获取数据库表的具体信息

/** * 通过Hibernate配置获取数据库表的具体信息 * @author 晚风工作室 www.soservers.com * */ 标签: Hibernate [1].[代码] [Java]代码 跳至 [1] ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 5

MySQL---数据库从入门走向大神系列(十一)-Java获取数据库/结果集的元信息、将数据表写入excel表格

数据库的元信息: 首先介绍一下数据库的元信息(元数据): 元数据(Metadata)是关于数据的数据. 元数据是描述数据仓库内数据的结构和建立方法的数据. 存储的数据是什么类型,什么驱动等等,这些描述数据的数据,就是元数据! 准备: package cn.hncu.pool3; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; i

hibernate即时获取数据库信息

由于读取数据的时候,Hibernate将第一次读取的内容放到了缓存中,若此时有别的应用修改了数据库中的数据,程序再次读取的时候,内容是从缓存中直接获取,无法反映数据库中的最新状况. 因此,可以设置读取数据的模式,不用读取缓存,从数据库中直接读取,方法如下: public List queryObjectsByHQL(String hql, boolean queryFromCache) throws HibernateException{Session session = getSession(