我尝试使用:检查我的数据库
<?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;
表上的数据库吗?
谢谢。
答案 0 :(得分:1)
mysql.db是一个内部系统表,因此很难找到与其相关的官方文档。我发现this MariaDB documentation指出:
mysql.db是一个系统表,其中包含有关数据库级特权的信息
该表用于存储用户的GRANTS
(这说明了为什么您多次看到同一数据库)。
显然,这不是查找可用数据库的好地方。
为此,最好使用SHOW DATABASES
或the information schema。
答案 1 :(得分:0)
您可以通过三种方法查找数据库信息:
mysql
数据库,这是MySQL Server自身用于簿记的内部架构。SHOW
命令,这是最早将信息公开给最终用户的机制。information_schema
数据库是具有动态生成的表的“虚拟”数据库,后来被实现为SHOW
命令的增强。您应该使用除第一个以外的任何内容(主要是因为它不包含您认为的内容,而且还因为常规用户永远都不能对其进行读取访问)。在实践中,我发现使用SHOW
还是information_schema
取决于服务器:它们有时具有非常不同的性能,并且您并不总是拥有该模式的权限。
答案 2 :(得分:0)
有趣的事实:您可以删除一个数据库,但仍然可以在 mysql.db
上找到它的名称。所以这是你不能依赖的另一点。