首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 並不支援「使用者預設 Schema」:正確設定會話預設資料庫的方式

     編輯:MySQL 綜合教學

核心結論

MySQL 沒有「使用者層級的預設 Schema/Database」設定。 預設資料庫屬於會話層級,必須在每次連線建立後、或連線字串中顯式指定。

兩種標準設定方式

1. 連線字串指定 (推薦,應用層解決)

  • JDBC: jdbc:mysql://host:3306/your_db?useSSL=false
  • Python (PyMySQL): connect(host='...', database='your_db', ...)
  • Go (sql.Open): "user:pass@tcp(host:3306)/your_db"

此法確保連線一建立即進入正確資料庫,無額外交互。

2. SQL 命令切換 (會話內動態切換)

USE target_database;

效力範圍:當前會話剩餘時間,或直到下一個 USE 命令。可用 SELECT DATABASE(); 查看當前預設庫。

常見誤區:嘗試在 Stored Procedure / Script 中動態切換

StackOverflow 範例嘗試在迴圈中用變數動態切換 DB 執行 DDL:

-- 錯誤嘗試:無法用變數作為 USE 的參數
SET @db = 'db_name';
USE @db; -- 語法錯誤

正解: 僅能構建動態 SQL 執行:

SET @stmt = CONCAT('USE ', @db, '; ALTER TABLE `tbl` ...');
PREPARE s FROM @stmt; EXECUTE s; DEALLOCATE PREPARE s;

或在應用層迴圈中重新建立連線/切換 DB,避免在單一腳本中跨庫操作 DDL。

補充:MySQL 中 Schema = Database

MySQL 術語中 SCHEMA 為 DATABASE 同義詞 (CREATE SCHEMA = CREATE DATABASE),不具備 PostgreSQL/Oracle 那種「命名空間」語義。因此「使用者預設 Schema」在 MySQL 架構中不存在。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved