information_schema数据库代表什么?

时间:2010-06-16 01:49:53

标签: information-schema mysql5

我在mysql中有一个数据库。

但是当我登录phpMyAdmin时,它会显示另一个名为information_schema的数据库。

该数据库是否始终与一个数据库一起出现?

我的意思是说mysql中存在的每个数据库都有一个information_schema的副本,或者每个mysql服务器有一个名为inforemation_schema的数据库吗?

如果我修改了这个information_schema数据库,它将如何影响我当前的数据库?

1 个答案:

答案 0 :(得分:27)

您可以将information_schema视为“主数据库”,其中包含有关服务器上所有其他数据库的详细信息,例如表,列和用户的名称和类型。

什么是information_schema?

来自the reference documentation:

  

INFORMATION_SCHEMA提供访问权限   数据库元数据

     

元数据是关于数据的数据,例如   作为数据库或表的名称,   列的数据类型或访问权限   特权。有时候的其他术语   用于此信息的是数据   字典和系统目录。

     

INFORMATION_SCHEMA是信息   数据库,存储的地方   关于所有其他的信息   数据库即MySQL服务器   维持。里面的INFORMATION_SCHEMA   有几个只读表。   它们实际上是观点,而不是基础   表,所以没有文件   与他们联系。

information_schema中存储了什么?

通过查看this diagram(适用于MySQL 5.0)或this diagram(适用于MySQL 5.1),您可以查看information_schema中存储的各种内容及其组织方式。

如果修改information_schema会怎样?

实际上,information_schema是只读视图的集合。因此,应该无法对其进行修改并造成任何损害。但是,the MySQL FAQ on this topic有这样的说法:

  

23.7.3:我可以添加或修改中找到的表格   INFORMATION_SCHEMA数据库?

     

没有。   由于应用程序可能依赖于   这个标准结构   不应该修改。为了这   原因,我们不能支持错误或   由此产生的其他问题   修改INFORMATION_SCHEMA表或   数据

这意味着如果你确实发现自己能够修改information_schema(这应该是不可能的,并且在MySQL中,但SQL的其他供应商实现可能允许它),你至少应该选择不这样做。如果你可能损坏/修改information_schema,你将损害其他数据库的实际结构(例如表名,列类型)。

每个用户都有自己的information_schema副本吗?

每个用户都可以看到与他们有权访问的表和数据库相关的information_schema。权限非常有限的某些用户仍会看到information_schema,但只会看到任何information_schema查询的NULL值。但是,重要的是要记住,information_schema不是一个实际的数据库,而只是SQL提供的一种方便的方式,以便您可以选择有关数据库和表的信息。

来自the reference documentation:

  

每个MySQL用户都有权利   访问这些表,但只能看到   表中对应的行   到用户拥有的对象   适当的访问权限。在一些   案件(例如,   ROUTINE_DEFINITION列中的   INFORMATION_SCHEMA.ROUTINES表),   权限不足的用户   会看到NULL。

我在哪里可以找到更多信息?