You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MySQL中获取仅用户创建的数据库列表

如何过滤MySQL中的系统库,只显示用户创建的数据库

嘿,我太懂你这个困扰了——用SHOW DATABASES查库的时候,那几个系统库总是凑上来,试了各种LIKE、WHERE写法都没搞定。其实问题出在语法细节和查询思路上,给你两个靠谱的解决方案:

方法一:修正SHOW DATABASES的WHERE子句写法

你之前的写法无效,核心问题是把字段名Database用单引号括起来了——MySQL会把单引号里的内容当成普通字符串,而不是要查询的字段。正确的写法应该用反引号包裹字段名(避免关键字冲突,更安全),然后一次性排除所有系统库:

SHOW DATABASES 
WHERE `Database` NOT IN ('mysql', 'information_schema', 'performance_schema', 'sys');

注:sys是MySQL 5.7及以上版本新增的系统库,如果你的版本没有,可以去掉这个值。

要是习惯用NOT LIKE的逻辑,也可以这么写:

SHOW DATABASES 
WHERE `Database` NOT LIKE 'mysql'
AND `Database` NOT LIKE 'information_schema'
AND `Database` NOT LIKE 'performance_schema'
AND `Database` NOT LIKE 'sys';

方法二:直接查询information_schema.SCHEMATA表(更推荐)

其实SHOW DATABASES本质就是查询information_schema.SCHEMATA这个系统表,直接查它能给你更多灵活性——比如后续想加按创建时间过滤、权限过滤都很方便。写法如下:

SELECT SCHEMA_NAME AS `Database`
FROM information_schema.SCHEMATA
WHERE SCHEMA_NAME NOT IN ('mysql', 'information_schema', 'performance_schema', 'sys');

这个查询结果和过滤后的SHOW DATABASES完全一致,但扩展性更强,比如你可以加个ORDER BY SCHEMA_NAME让结果按名称排序。

复盘下之前的错误原因

再给你理清楚为啥之前的写法没用:

  • SHOW DATABASES NOT LIKE 'information_schema':语法错误,SHOW DATABASES不支持直接跟NOT LIKE,必须搭配WHERE子句。
  • SHOW DATABASES WHERE 'Database' NOT LIKE 'information_schema':单引号把Database变成了字符串常量,相当于拿'Database'和'information_schema'做比较,结果永远为真,自然没过滤效果。

内容的提问来源于stack exchange,提问作者Charlie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:58:57