MySQL刷新表 - 当前数据库还是每个数据库?

时间:2008-12-03 12:21:40

标签: mysql

MySQL命令:

FLUSH TABLES;

刷新当前数据库中的每个表,还是刷新服务器上的每个表?

我正在使用MySQL 5.0 - documentation尚不清楚,尽管确实提到了:

FLUSH TABLES WITH READ LOCK;

将对所有数据库执行此操作。

感谢。

4 个答案:

答案 0 :(得分:18)

这是所有数据库。

答案 1 :(得分:9)

我试着看一下,但我也找不到权威的答案。

  • 我和你一样看了手册。
  • 我在FLUSH TABLES上找到了MySQL Internals文档,但没有具体说明。
  • 我甚至在mysql_server/sql/sql_base.cc中阅读了源代码,但很快找不到答案。

我认为答案是开发人员认为非常明显的事情之一,他们永远不需要说出来。

根据内部文档,MySQL表缓存包含最近使用的表的列表。没有提到特定于数据库的表缓存,MySQL服务器中似乎只有一个表缓存。

FLUSH TABLES被描述为强制关闭所有打开的表(表缓存中的表)。没有提到这仅限于一个数据库,但您可以在FLUSH TABLES的参数中指定单个表。同样,我认为这默认适用于整个表缓存,因此也适用于MySQL服务器上具有打开文件的所有数据库。

答案 2 :(得分:7)

当你只做一个mysql_connect然后“show tables”时 - > mysql_error():未选择数据库

使用“刷新表”没有mysql_error,所以我认为答案是 每个数据库

答案 3 :(得分:0)

FLUSH TABLES已对所有数据库完成,除非您一一指定表。

语法是:

FLUSH TABLES tbl_name [, tbl_name] ...

READ LOCK

FLUSH TABLES tbl_name [, tbl_name] ... WITH READ LOCK

并包含数据库中的所有表,您可以获取查询SHOW TABLES以显示所选数据库中的所有表。因此,进行一些编辑后,查询将如下所示:

FLUSH TABLES db_name.table_1, 
             db_name.table_2,
             db_name.table_3,
             ...