DATABASE() 是返回当前选定数据库名的SQL函数,未选库时返回NULL;必须用 SELECT DATABASE() 调用,不可单独使用;与客户端命令 STATUS 本质不同,适用于程序逻辑判断。

怎么用 DATABASE() 查当前数据库名
直接执行 DATABASE() 函数就能拿到当前选中的数据库名,它返回一个字符串,没选库时返回 NULL。不是命令、不是语句,是函数,必须放在 SQL 表达式里用,比如 SELECT DATABASE();。
- 不能单独写
DATABASE;或USE DATABASE();—— 都会报错ERROR 1064 - 在存储过程或触发器里也适用,但要注意执行上下文是否已明确
USE过库 - 如果连接后没执行过
USE xxx;,DATABASE()返回NULL,不代表出错,只是“当前无默认库”
SELECT DATABASE() 和 STATUS 命令的区别
SELECT DATABASE(); 是 SQL 查询,走查询引擎,结果可被程序读取、拼接、判断;而 STATUS(或 \s)是 MySQL 客户端命令,只在 mysql shell 里生效,输出一堆连接和环境信息,其中 Current database: 那行才是你要的库名。
- 写脚本或应用逻辑时,只能依赖
SELECT DATABASE(),STATUS根本没法解析 -
STATUS显示的库名可能带括号(如Current database: `my_app`),而DATABASE()返回纯字符串"my_app" - 某些低权限账号能执行
SELECT DATABASE(),但运行STATUS会被客户端拒绝(比如用 DBeaver 连接时根本没这个命令入口)
为什么 SHOW DATABASES 不等于“当前库”
SHOW DATABASES 列出的是你有权限看到的所有数据库名,和当前在哪无关。新手常混淆这点,以为执行完它就自动切到某个库了——完全不会。
-
SHOW DATABASES结果里高亮或标记当前库?没有。MySQL 原生不支持 - 想确认当前库又顺带看有哪些库,得两条语句:先
SELECT DATABASE();,再SHOW DATABASES; - 如果权限受限(比如只有
USAGE),SHOW DATABASES可能只返回空集,但DATABASE()仍能正确返回已USE的库名
连接刚建立时的“当前位置”其实是未定义的
MySQL 协议层面不强制连接必须绑定一个库。很多 ORM(如 Django、SQLAlchemy)或连接池(如 HikariCP)初始化连接后并不立刻 USE,此时 DATABASE() 就是 NULL,所有未带库名的表操作都会报错 ERROR 1046: No database selected。
- 建连参数里加
?database=mydb(JDBC)或database='mydb'(Python mysql-connector)可自动USE - 执行
CREATE TABLE t1(...)前,务必确认DATABASE()不为NULL,否则一定失败 -
INFORMATION_SCHEMA表可以跨库查,但像TABLES视图里的TABLE_SCHEMA字段才表示归属库,别误当成“当前库”
DATABASE() 很可能还是 NULL,而错误信息又只说“no database selected”,不提醒你该主动 USE 一把。










