執行 SHOW TABLES 或查詢表時出現 ERROR 1046 (3D000): No database selected,是新手最常遇到的錯誤。本文說明原因、解決方式與避免技巧。
mysql> SHOW TABLES;
ERROR 1046 (3D000): No database selected
MySQL 連線建立後,**未指定當前預設資料庫**。所有無前綴資料庫名的表操作(SHOW TABLES、SELECT * FROM t、DESC t 等)都需要先選擇資料庫上下文。
-- 方法 1:USE 指令(互動模式最常用)
mysql> USE `mydb`;
Database changed
mysql> SHOW TABLES;
+----------------+
| Tables_in_mydb |
+----------------+
| user |
| order |
+----------------+
-- 方法 2:連線時指定(腳本/應用推薦)
mysql -u root -p -D mydb
# 或
mysql -u root -p mydb
-- 方法 3:SQL 前綴資料庫名(跨庫查詢必用)
SELECT * FROM `mydb`.`user`;
SHOW TABLES FROM `mydb`;
jdbc:mysql://host:3306/mydb,避免借用連線時上下文遺失。@Table(name = "user", schema = "mydb") 顯式指定 schema。USE 或前綴 schema 名,注意連線池連線不可共用不同 schema(除非統一權限)。| 誤區 | 正確認知 |
|---|---|
| 以為建立表就自動選擇該庫 | CREATE TABLE mydb.t ... 只建表,**不切換**當前資料庫 |
以為 SHOW DATABASES 後會自動進入第一個庫 | 僅列表,不切換上下文 |
| 在 Stored Procedure 內不需要 USE | SP 執行時繼承呼叫者的當前資料庫,建議內部用完整 db.table 寫法 |