在MySQL中,数据库是存储和管理数据的容器。创建数据库是使用MySQL的第一步,本章将详细介绍多种创建数据库的方法和最佳实践。
CREATE DATABASE [IF NOT EXISTS] database_name
[CHARACTER SET charset_name]
[COLLATE collation_name];
| 参数 | 描述 | 是否可选 |
|---|---|---|
IF NOT EXISTS |
如果数据库已存在,防止报错 | 可选 |
database_name |
数据库名称 | 必需 |
CHARACTER SET |
指定字符集 | 可选 |
COLLATE |
指定排序规则 | 可选 |
mysqladmin -u username -p create database_name
# 使用root用户创建名为TUTORIALS的数据库
[root@host]# mysqladmin -u root -p create TUTORIALS
Enter password: ******
# 登录MySQL并查看数据库列表
mysql -u root -p
Enter password: ******
mysql> SHOW DATABASES;
输出结果应包含新创建的数据库:
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| TUTORIALS |
+--------------------+
5 rows in set (0.00 sec)
# 登录MySQL
mysql -u root -p
Enter password: ******
-- 创建简单数据库
CREATE DATABASE mydatabase;
-- 创建数据库并指定字符集
CREATE DATABASE mydatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 安全创建数据库(如果不存在)
CREATE DATABASE IF NOT EXISTS mydatabase;
-- 创建完整配置的数据库
CREATE DATABASE IF NOT EXISTS company_db
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
-- 选择数据库
USE mydatabase;
-- 查看当前使用的数据库
SELECT DATABASE();
mysql_* 函数已在PHP 7.0中移除,请使用MySQLi或PDO扩展。
<?php
$servername = "localhost";
$username = "root";
$password = "rootpassword";
// 创建连接(不指定数据库)
$conn = new mysqli($servername, $username, $password);
// 检查连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
echo "连接成功<br>";
// 创建数据库
$sql = "CREATE DATABASE IF NOT EXISTS TUTORIALS";
if ($conn->query($sql) === TRUE) {
echo "数据库 TUTORIALS 创建成功";
} else {
echo "创建数据库失败: " . $conn->error;
}
// 关闭连接
$conn->close();
?>
<?php
$servername = "localhost";
$username = "root";
$password = "rootpassword";
// 创建连接
$conn = mysqli_connect($servername, $username, $password);
// 检查连接
if (!$conn) {
die("连接失败: " . mysqli_connect_error());
}
echo "连接成功<br>";
// 创建数据库
$sql = "CREATE DATABASE COMPANY";
if (mysqli_query($conn, $sql)) {
echo "数据库 COMPANY 创建成功";
} else {
echo "创建数据库失败: " . mysqli_error($conn);
}
// 关闭连接
mysqli_close($conn);
?>
<?php
$servername = "localhost";
$username = "root";
$password = "rootpassword";
try {
// 创建连接(不指定数据库)
$conn = new PDO("mysql:host=$servername", $username, $password);
// 设置PDO错误模式为异常
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "连接成功<br>";
// 创建数据库
$sql = "CREATE DATABASE IF NOT EXISTS MYAPP CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci";
$conn->exec($sql);
echo "数据库 MYAPP 创建成功";
} catch(PDOException $e) {
echo "错误: " . $e->getMessage();
}
// 关闭连接
$conn = null;
?>
import mysql.connector
from mysql.connector import Error
try:
# 连接到MySQL服务器(不指定数据库)
connection = mysql.connector.connect(
host='localhost',
user='root',
password='rootpassword'
)
if connection.is_connected():
cursor = connection.cursor()
# 创建数据库
cursor.execute("CREATE DATABASE IF NOT EXISTS pythondb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci")
print("数据库创建成功")
except Error as e:
print("错误:", e)
finally:
if connection.is_connected():
cursor.close()
connection.close()
print("MySQL连接已关闭")
| 字符集 | 描述 | 推荐用途 |
|---|---|---|
utf8mb4 |
UTF-8 Unicode(4字节),支持所有Unicode字符包括emoji | 现代Web应用(推荐) |
utf8 |
UTF-8 Unicode(3字节),不支持所有emoji | 旧系统兼容 |
latin1 |
西欧字符 | 仅需西欧语言的应用 |
-- 创建数据库时指定字符集和排序规则
CREATE DATABASE myapp
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
-- 修改现有数据库的字符集
ALTER DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 查看所有字符集
SHOW CHARACTER SET;
-- 查看所有排序规则
SHOW COLLATION;
-- 查看特定字符集的排序规则
SHOW COLLATION WHERE Charset = 'utf8mb4';
-- 创建用户(如果不存在)
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypassword';
-- 授予用户对特定数据库的所有权限
GRANT ALL PRIVILEGES ON mydatabase.* TO 'myuser'@'localhost';
-- 授予用户创建数据库的权限
GRANT CREATE ON *.* TO 'myuser'@'localhost';
-- 刷新权限
FLUSH PRIVILEGES;
-- 查看用户权限
SHOW GRANTS FOR 'myuser'@'localhost';
utf8mb4ERROR 1044 (42000): Access denied for user 'username'@'localhost' to database 'mydatabase'
解决方案:使用具有CREATE权限的用户,或请求管理员授予权限。
ERROR 1007 (HY000): Can't create database 'mydatabase'; database exists
解决方案:使用CREATE DATABASE IF NOT EXISTS语句。
ERROR 1008 (HY000): Can't drop database 'my-database'; database doesn't exist
解决方案:避免在数据库名称中使用特殊字符,使用下划线代替连字符。
ERROR 1273 (HY000): Unknown collation: 'utf8mb4_unicode_ci'
解决方案:升级MySQL版本或使用支持的字符集。
-- 创建数据库
CREATE DATABASE IF NOT EXISTS myapp
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
-- 创建应用用户
CREATE USER IF NOT EXISTS 'myapp_user'@'localhost' IDENTIFIED BY 'secure_password';
-- 授予权限
GRANT ALL PRIVILEGES ON myapp.* TO 'myapp_user'@'localhost';
-- 刷新权限
FLUSH PRIVILEGES;
-- 使用数据库
USE myapp;
-- 创建表等后续操作...
-- 查看数据库信息
SELECT
SCHEMA_NAME AS 'Database',
DEFAULT_CHARACTER_SET_NAME AS 'Charset',
DEFAULT_COLLATION_NAME AS 'Collation'
FROM information_schema.SCHEMATA
WHERE SCHEMA_NAME = 'mydatabase';