关于我的数据库MySQL的语法有些困惑

时间:2019-01-05 14:02:37

标签: mysql sql syntax

我尝试使用:检查我的数据库

<?php

namespace annotations;

/**
 * @Annotation
 * @Target("CLASS")
 */
final class TestAnnotation
{
    /**
     * @var string
     */
    public $value;
}

我还尝试检查以下数据库:

[Semantical Error] The annotation "@annotations\TestAnnotation" in class entities\MyClass does not exist, or could not be auto-loaded.

为什么mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | db1 | | db2 | | sys | +--------------------+ 6 rows in set (0,09 sec) mysql> SELECT Db FROM mysql.db; +--------------------+ | Db | +--------------------+ | performance_schema | | sys | | db1 | | db2 | | db1 | | db2 | +--------------------+ 6 rows in set (0,00 sec) 的结果不同?

我可以更新SHOW DATABASES;表上的数据库吗?

谢谢。

3 个答案:

答案 0 :(得分:1)

mysql.db是一个内部系统表,因此很难找到与其相关的官方文档。我发现this MariaDB documentation指出:

  

mysql.db是一个系统表,其中包含有关数据库级特权的信息

该表用于存储用户的GRANTS(这说明了为什么您多次看到同一数据库)。 显然,这不是查找可用数据库的好地方。

为此,最好使用SHOW DATABASESthe information schema

答案 1 :(得分:0)

您可以通过三种方法查找数据库信息:

  1. mysql数据库,这是MySQL Server自身用于簿记的内部架构。
  2. SHOW命令,这是最早将信息公开给最终用户的机制。
  3. information_schema数据库是具有动态生成的表的“虚拟”数据库,后来被实现为SHOW命令的增强。

您应该使用除第一个以外的任何内容(主要是因为它不包含您认为的内容,而且还因为常规用户永远都不能对其进行读取访问)。在实践中,我发现使用SHOW还是information_schema取决于服务器:它们有时具有非常不同的性能,并且您并不总是拥有该模式的权限。

答案 2 :(得分:0)

有趣的事实:您可以删除一个数据库,但仍然可以在 mysql.db 上找到它的名称。所以这是你不能依赖的另一点。