我在mysql中有一个数据库。
但是当我登录phpMyAdmin时,它会显示另一个名为information_schema的数据库。
该数据库是否始终与一个数据库一起出现?
我的意思是说mysql中存在的每个数据库都有一个information_schema的副本,或者每个mysql服务器有一个名为inforemation_schema的数据库吗?
如果我修改了这个information_schema数据库,它将如何影响我当前的数据库?
答案 0 :(得分:27)
您可以将information_schema视为“主数据库”,其中包含有关服务器上所有其他数据库的详细信息,例如表,列和用户的名称和类型。
来自the reference documentation:
INFORMATION_SCHEMA提供访问权限 数据库元数据
元数据是关于数据的数据,例如 作为数据库或表的名称, 列的数据类型或访问权限 特权。有时候的其他术语 用于此信息的是数据 字典和系统目录。
INFORMATION_SCHEMA是信息 数据库,存储的地方 关于所有其他的信息 数据库即MySQL服务器 维持。里面的INFORMATION_SCHEMA 有几个只读表。 它们实际上是观点,而不是基础 表,所以没有文件 与他们联系。
通过查看this diagram(适用于MySQL 5.0)或this diagram(适用于MySQL 5.1),您可以查看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查询的NULL值。但是,重要的是要记住,information_schema不是一个实际的数据库,而只是SQL提供的一种方便的方式,以便您可以选择有关数据库和表的信息。
来自the reference documentation:
每个MySQL用户都有权利 访问这些表,但只能看到 表中对应的行 到用户拥有的对象 适当的访问权限。在一些 案件(例如, ROUTINE_DEFINITION列中的 INFORMATION_SCHEMA.ROUTINES表), 权限不足的用户 会看到NULL。