首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL USE 選擇資料庫:切換當前預設庫、跨庫查詢語法與連線池最佳實踐

     編輯:MySQL 資料庫相關知識

USE 語法


USE db_name;
-- 將 db_name 設為當前 Session 的預設資料庫
-- 後續無前綴的表名將解析為 db_name.表名

互動模式範例


mysql> USE shili;
Database changed
mysql> SELECT * FROM shili_user;
+----+----------+----------+
| id | username | password |
+----+----------+----------+
|  1 | 明日科技 | 123456   |
+----+----------+----------+

跨資料庫查詢 (無需 USE 切換)


-- 完整限定名:database.table
SELECT * FROM shili.shili_user;

-- 連接多庫表
SELECT u.username, o.order_no
FROM shop.users u
JOIN orders.orders o ON u.id = o.user_id
WHERE u.status = 1;

連線池與應用層最佳實踐

場景建議範例
單一應用對單一資料庫連線字串指定 Database,無需 USEjdbc:mysql://host:3306/shop?useSSL=false
單一應用對多資料庫建立多個 DataSource,各自指定 DatabaseSpring: @Primary DataSource shopDs + DataSource ordersDs
共用連線池需動態切庫極不推薦;若必須,執行 USE db 後立即執行業務 SQL,同一事務內事務邊界內保證一致性
多租戶 (Schema 隔離)連線建立後執行 USE tenant_${id},或使用 SET SESSION schema = ... (8.0+)中介軟體攔截器自動切換

驗證當前資料庫


SELECT DATABASE();  -- 回傳當前預設庫,若無則 NULL
SHOW TABLES;        -- 列出當前庫所有表

避坑指南

  • ❌ 連線字串未指定 Database,應用啟動後首個查詢報 No database selected。
  • ❌ 事務中途 USE other_db → 隱式提交當前事務 (DDL/USE 導致隱式提交)。
  • ❌ 預存程序/觸發器/事件定義體內使用 USE → 編譯錯誤或運行時錯誤。
  • ✅ 連線建立時即指定目標 Database,避免運行時切換。
  • ✅ 跨庫查詢使用完整限定名 db.table,清晰可追溯。
USE 是 Session 級狀態,非全域。連線池複用連線時,前一請求的 USE 狀態會殘留到下一請求,極易導致「查錯庫」生產事故。鐵律:連線字串顯式指定 Database,應用層杜絕動態 USE。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved