26

我在mysql中有一个数据库。

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

该数据库是否始终与一个数据库一起存在?

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

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

4

1 回答 1

32

您可以将 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,但对于任何 information_schema 查询只会看到 NULL 值。但是,重要的是要记住 information_schema 不是一个实际的数据库,而只是 SQL 提供的一种方便的方式,以便您可以选择有关数据库和表的信息。

参考文档:

每个 MySQL 用户都有权访问这些表,但只能看到表中与用户具有适当访问权限的对象相对应的行。在某些情况下(例如,INFORMATION_SCHEMA.ROUTINES 表中的 ROUTINE_DEFINITION 列),权限不足的用户会看到 NULL。

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

于 2010-06-16T01:51:59.457 回答