連線 MySQL 後,伺服器實例上可能存在數十個資料庫(Schema)。USE 指令(命令列)或 mysql_select_db()(PHP)將當前會話的「預設資料庫」切換至目標庫,後續無前綴的表操作將在該庫下執行。本文講解語法、大小寫敏感規則、PHP 實戰與連線池場景下的注意事項。
mysql> USE RUNOOB; Database changed
SELECT * FROM t; 等同於 SELECT * FROM RUNOOB.t;。lower_case_table_names 系統變數,Windows 預設不區分)。建議統一小寫命名,代碼中嚴格按建表大小寫引用。<?php
$conn = mysqli_connect('localhost:3306', 'guest', 'guest123');
if (!$conn) die('Connect failed: ' . mysqli_connect_error());
// 選擇資料庫
if (!mysqli_select_db($conn, 'RUNOOB')) {
die('Select DB failed: ' . mysqli_error($conn));
}
echo 'Database selected successfully';
mysqli_close($conn);
?>
<?php
$conn = new mysqli('localhost:3306', 'guest', 'guest123', 'RUNOOB'); // 連線時直接指定
if ($conn->connect_error) die('Connect failed: ' . $conn->connect_error);
// 或後續切換
$conn->select_db('OTHER_DB');
?>
<?php
$dsn = 'mysql:host=localhost;port=3306;dbname=RUNOOB;charset=utf8mb4';
$pdo = new PDO($dsn, 'guest', 'guest123', [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
]);
// 連線即選庫,無需額外呼叫
?>
dbname(PDO/mysqli 物件風格支援)。`db_name`.`table_name`,避免會話預設庫不一致導致跨庫誤操作。USAGE 或具體表權限)。SELECT/INSERT/UPDATE/DELETE,不給 DROP/CREATE/ALTER。Error 1044: Access denied for user ''@'%' to database 'RUNOOB':權限不足,需 GRANT ... ON RUNOOB.* TO 'user'@'host';Error 1049: Unknown database 'runoob':庫名大小寫錯誤(Linux 區分大小寫),核對實際庫名。dbname,避免額外選庫呼叫。`db`.`table`,不依賴會話預設庫。選擇資料庫雖是簡單動作,卻是跨庫誤操作、大小寫 Bug、權限洩漏的高發區。將「連線即選庫、SQL 全限定名、命名全小寫」貫徹落地,從源頭消除這類低級錯誤。