在连接到MySQL服务器后,通常有多个数据库可供操作。选择正确的数据库是执行后续操作的前提。本章将详细介绍多种选择和切换数据库的方法。
USE database_name;
# 在连接时指定数据库
mysql -u username -p database_name
# 示例:连接到TUTORIALS数据库
[root@host]# mysql -u root -p TUTORIALS
Enter password: ******
# 先连接到MySQL服务器
[root@host]# mysql -u root -p
Enter password: ******
-- 查看所有数据库
SHOW DATABASES;
-- 选择TUTORIALS数据库
USE TUTORIALS;
-- 确认当前选择的数据库
SELECT DATABASE();
-- 登录MySQL后的完整操作示例
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| TUTORIALS |
| company |
| test |
+--------------------+
7 rows in set (0.00 sec)
mysql> USE TUTORIALS;
Database changed
mysql> SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| TUTORIALS |
+------------+
1 row in set (0.00 sec)
mysql_select_db() 函数已在PHP 7.0中移除,请使用MySQLi或PDO扩展。
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$database = "TUTORIALS";
// 创建连接并选择数据库
$conn = new mysqli($servername, $username, $password, $database);
// 检查连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
echo "成功连接到数据库: " . $database;
// 也可以先连接,再选择数据库
$conn2 = new mysqli($servername, $username, $password);
if ($conn2->connect_error) {
die("连接失败: " . $conn2->connect_error);
}
// 选择数据库
if ($conn2->select_db($database)) {
echo "成功选择数据库: " . $database;
} else {
echo "选择数据库失败: " . $conn2->error;
}
// 关闭连接
$conn->close();
$conn2->close();
?>
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$database = "TUTORIALS";
// 创建连接
$conn = mysqli_connect($servername, $username, $password);
// 检查连接
if (!$conn) {
die("连接失败: " . mysqli_connect_error());
}
// 选择数据库
if (mysqli_select_db($conn, $database)) {
echo "成功选择数据库: " . $database;
} else {
echo "选择数据库失败: " . mysqli_error($conn);
}
// 关闭连接
mysqli_close($conn);
?>
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$database = "TUTORIALS";
try {
// PDO在连接时直接指定数据库
$conn = new PDO("mysql:host=$servername;dbname=$database", $username, $password);
// 设置PDO错误模式为异常
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "成功连接到数据库: " . $database;
// 如果需要切换数据库,可以使用USE语句
$conn->exec("USE company");
echo "已切换到数据库: company";
} catch(PDOException $e) {
echo "错误: " . $e->getMessage();
}
// 关闭连接
$conn = null;
?>
import mysql.connector
from mysql.connector import Error
try:
# 连接时直接指定数据库
connection = mysql.connector.connect(
host='localhost',
user='username',
password='password',
database='TUTORIALS'
)
if connection.is_connected():
db_info = connection.get_server_info()
print("成功连接到MySQL服务器,版本:", db_info)
print("当前数据库:", connection.database)
except Error as e:
print("错误:", e)
finally:
if connection.is_connected():
connection.close()
print("MySQL连接已关闭")
import mysql.connector
from mysql.connector import Error
try:
# 先连接到MySQL服务器
connection = mysql.connector.connect(
host='localhost',
user='username',
password='password'
)
if connection.is_connected():
cursor = connection.cursor()
# 查看所有数据库
cursor.execute("SHOW DATABASES")
print("可用数据库:")
for db in cursor:
print(f" - {db[0]}")
# 选择数据库
cursor.execute("USE TUTORIALS")
print(f"已选择数据库: {connection.database}")
# 或者使用select_db方法
connection.database = 'company'
print(f"已切换到数据库: {connection.database}")
except Error as e:
print("错误:", e)
finally:
if connection.is_connected():
cursor.close()
connection.close()
print("MySQL连接已关闭")
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class SelectDatabase {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/";
String username = "username";
String password = "password";
try {
// 加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 建立连接
Connection connection = DriverManager.getConnection(url, username, password);
// 创建Statement并选择数据库
Statement statement = connection.createStatement();
statement.execute("USE TUTORIALS");
System.out.println("数据库选择成功");
// 关闭连接
connection.close();
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
}
const mysql = require('mysql2');
// 创建连接时指定数据库
const connection = mysql.createConnection({
host: 'localhost',
user: 'username',
password: 'password',
database: 'TUTORIALS'
});
connection.connect((err) => {
if (err) {
console.error('连接失败: ' + err.stack);
return;
}
console.log('成功连接到数据库: TUTORIALS');
});
// 或者连接后切换数据库
connection.changeUser({ database: 'company' }, (err) => {
if (err) {
console.error('切换数据库失败: ' + err);
} else {
console.log('已切换到数据库: company');
}
});
connection.end();
-- 查看所有数据库
SHOW DATABASES;
-- 查看匹配特定模式的数据库
SHOW DATABASES LIKE 'test%';
-- 查看当前数据库
SELECT DATABASE();
-- 或者使用status命令
STATUS;
-- 查看数据库的创建信息
SHOW CREATE DATABASE database_name;
-- 查看数据库的字符集和排序规则
SELECT
SCHEMA_NAME AS 'Database',
DEFAULT_CHARACTER_SET_NAME AS 'Charset',
DEFAULT_COLLATION_NAME AS 'Collation'
FROM information_schema.SCHEMATA
WHERE SCHEMA_NAME = 'database_name';
-- 查看当前用户对特定数据库的权限
SHOW GRANTS FOR CURRENT_USER;
-- 查看用户是否有特定数据库的权限
SELECT * FROM information_schema.SCHEMA_PRIVILEGES
WHERE GRANTEE = "'username'@'host'"
AND TABLE_SCHEMA = 'database_name';
ERROR 1049 (42000): Unknown database 'database_name'
解决方案:检查数据库名称拼写,或先创建数据库。
ERROR 1044 (42000): Access denied for user 'username'@'localhost' to database 'database_name'
解决方案:请求管理员授予数据库访问权限。
ERROR 1273 (HY000): Unknown collation: 'utf8mb4_unicode_ci'
解决方案:升级MySQL版本或修改数据库字符集。
-- 即使不在该数据库中,也可以查询其他数据库的表
SELECT * FROM other_database.table_name;
-- 跨数据库查询
SELECT
u.name,
o.order_date
FROM
user_database.users u
JOIN order_database.orders o ON u.id = o.user_id;
<?php
// 根据配置动态选择数据库
function connectToDatabase($dbName) {
$config = [
'host' => 'localhost',
'username' => 'root',
'password' => 'password'
];
$conn = new mysqli($config['host'], $config['username'], $config['password']);
if ($conn->connect_error) {
return null;
}
if ($conn->select_db($dbName)) {
return $conn;
} else {
$conn->close();
return null;
}
}
// 使用示例
$databases = ['TUTORIALS', 'company', 'test'];
foreach ($databases as $db) {
$conn = connectToDatabase($db);
if ($conn) {
echo "成功连接到数据库: $db\n";
// 执行操作...
$conn->close();
}
}
?>
<?php
// 保存当前数据库
function saveCurrentDatabase($conn) {
$result = $conn->query("SELECT DATABASE() AS db");
$row = $result->fetch_assoc();
return $row['db'];
}
// 恢复到之前的数据信
function restoreDatabase($conn, $database) {
if ($database) {
return $conn->select_db($database);
}
return true;
}
// 使用示例
$originalDb = saveCurrentDatabase($conn);
// 执行需要切换数据库的操作...
restoreDatabase($conn, $originalDb);
?>