在 phpMyAdmin 里点开 SQL 标签,粘贴一段建表语句,执行后顶上弹出红框:ERROR 1046 (3D000): No database selected。语句本身没毛病,问题在于当前连接还没指定操作哪个库。
这个报错到底在说什么
MySQL 的一条连接同一时间只能有一个「当前数据库」。执行 CREATE TABLE、SELECT、INSERT 时不带库名前缀,服务器就找当前库;当前库为空,直接抛 1046。命令行刚登录、客户端刚连上、导出的 SQL 文件里没有 USE 语句,都会触发。
三种改法,按场景挑
最直接的是先选库:
USE shop; SELECT COUNT(*) FROM orders;命令行登录时也可以直接带上库名,省一步:
mysql -u root -p shop不想依赖当前库,就在表名前写全名,库名和表名用点隔开:
SELECT COUNT(*) FROM shop.orders;导入 SQL 文件报这个错,多半是文件开头缺 USE。用文本编辑器在第一条语句前补一行 USE 库名;,或者导入时在客户端里先选中目标库再执行。文件是别人给的,先看一眼有没有 DROP DATABASE 之类的语句,别闭眼跑。
PHP 和图形客户端里的坑
PHP 用 mysqli 连接时,第四个参数就是默认库名,漏填后面全得手动选。PDO 的 DSN 里要写 dbname=shop,少写这一段,连接是成功的,第一条查询才报 1046。Navicat、DBeaver 这类客户端,左侧列表点中哪个库,查询窗口就默认在哪个库执行;点了服务器根节点再新建查询,当前库就是空的。
权限和库名大小写
库名拼错也会报 1046,Linux 下 MySQL 的库名默认区分大小写,Shop 和 shop 是两个库。账号没有该库权限时,有的版本提示 Access denied,有的干脆当成库不存在。先 SHOW DATABASES; 看列表里有没有目标库,再用 SELECT DATABASE(); 确认当前连的是哪个。
no database selected 不是 SQL 语法错误,别去改语句。先 USE 一下,或者把库名写全,问题基本就解决了。