信息模式数据库代表什么?

27

我在mysql中有一个数据库。

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

这个数据库是否总是存在于一个数据库中?

我的意思是说,对于mysql中存在的每个数据库,是否都有一个信息模式的副本,还是只有一个名为information_schema的数据库对应于整个mysql服务器?

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

1个回答

33

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

什么是information_schema?

根据参考文档:

INFORMATION_SCHEMA提供对数据库元数据的访问。

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

INFORMATION_SCHEMA是信息数据库,存储有关MySQL服务器维护的所有其他数据库的信息的地方。在INFORMATION_SCHEMA中有几个只读表。它们实际上是视图,而不是基本表,因此没有与它们相关联的文件。

information_schema中存储了什么?

您可以通过查看此图表(适用于MySQL 5.0)或此图表(适用于MySQL 5.1)来查看存储在information_schema中的内容种类和组织方式。

如果我修改information_schema会发生什么?

实际上,information_schema是一组只读视图的集合。因此,应该无法修改它并造成任何损坏。然而,关于此主题的MySQL FAQ有以下说法:
23.7.3:我能添加或修改在INFORMATION_SCHEMA数据库中找到的表吗?
不行。由于应用程序可能依赖于某种标准结构,因此不应修改它。出于这个原因,我们不能支持由于修改INFORMATION_SCHEMA表或数据而导致的错误或其他问题。
这意味着,如果您发现自己能够修改information_schema(这在MySQL中应该是不可能的,但SQL的其他供应商实现可能允许),您至少应该选择不要这样做。如果您可以损坏/修改information_schema,您将会破坏其他数据库的实际结构(例如表名、列类型)。
每个用户都可以看到与他们有权限访问的表和数据库相关的information_schema。一些权限受到严格限制的用户仍然可以看到information_schema,但对于任何information_schema查询,他们将只看到NULL值。然而,重要的是要记住,information_schema不是一个实际的数据库,而只是SQL提供的一种方便的方式,让您选择有关您的数据库和表的信息。
来自参考文档: 每个MySQL用户都有访问这些表的权利,但只能看到与用户拥有适当访问权限的对象相对应的表中的行。在某些情况下(例如INFORMATION_SCHEMA.ROUTINES表中的ROUTINE_DEFINITION列),权限不足的用户将看到NULL。
更多信息在哪里可以找到?
MySQL参考手册上的information_schema文章(http://dev.mysql.com/doc/refman/5.0/en/information-schema.html
MySQL关于information_schema的FAQ文章(http://dev.mysql.com/doc/refman/5.0/en/faqs-information-schema.html

但如果那是敏感数据,那么为什么作为普通用户我可以看到那个数据库呢?它应该默认隐藏。这不是安全漏洞吗? - John
1
你不是普通用户,我想你创建了自己的数据库,这使你成为了服务器管理员。当你使用phpMyAdmin时,你可能已经以默认的root用户登录了吧? - Matt Mitchell
它也不保存您其他数据库的数据,只保存结构,以防需要澄清。 - Matt Mitchell
我以root身份登录,但当我以普通用户身份登录时,没有任何特殊权限,我仍然可以看到information_schema。我从一家托管公司得到了一些数据库,并且他们给了我我的数据库详细信息。当我登录phpmyadmin时,我也可以看到我的数据库以及information_schema。然后我想也许它属于每个用户。 - John
回答已更新。基本概述:每个用户都可以看到与他们可以访问的内容相关的information_schema。如果您有进一步的问题,请告诉我,或者如果这个答案回答了您的问题,请接受它。 - Matt Mitchell
由于它是只读数据库,我想知道它存储在哪里,我知道它是一个虚拟表,但问题是information_schema存储在哪里。 - Sukan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接