我在mysql中有一个数据库。
但是当我登录到phpMyAdmin时,它显示了另一个名为information_schema的数据库。
该数据库是否始终只有一个数据库?
我的意思是,mysql中的每个数据库都有一个information_schema的副本,还是每个mysql服务器都有一个名为inforemation_schema的数据库?
如果我修改这个information_schema数据库,会对我当前数据库有什么影响?
发布于 2010-06-16 09:51:59
您可以将information_schema看作一个“主数据库”,它保存了服务器上所有其他数据库的详细信息,比如表、列和用户的名称和类型。
什么是information_schema?
来自the reference documentation:
INFORMATION_SCHEMA提供对数据库元数据的访问。
元数据是有关数据的数据,例如数据库或表的名称、列的数据类型或访问权限。有时用于此信息的其他术语是数据字典和系统目录。
INFORMATION_SCHEMA是信息数据库,是存储MySQL服务器维护的所有其他数据库的信息的地方。在INFORMATION_SCHEMA中有几个只读的表。它们实际上是视图,而不是基表,所以没有与之关联的文件。
information_schema中存储了什么内容?
通过查看information_schema (适用于MySQL 5.0)或this diagram (适用于MySQL 5.1),您可以查看存储在this diagram中的内容类型以及它们的组织方式。
如果我修改了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不是一个实际的数据库,而只是提供了一种方便的方法,以便您可以选择有关数据库和表的信息。
来自the reference documentation:
每个MySQL用户都有权访问这些表,但只能看到与该用户具有适当访问权限的对象对应的表中的行。在某些情况下(例如,INFORMATION_SCHEMA.ROUTINES表中的ROUTINE_DEFINITION列),没有足够权限的用户将看到NULL。
在哪里可以找到更多信息?
(http://dev.mysql.com/doc/refman/5.0/en/information-schema.html)
上的
https://stackoverflow.com/questions/3050225
复制相似问题