MySQL 创建数据库详解

在MySQL中,数据库是存储和管理数据的容器。创建数据库是使用MySQL的第一步,本章将详细介绍多种创建数据库的方法和最佳实践。

创建数据库的基本语法

SQL CREATE DATABASE 语句

CREATE DATABASE [IF NOT EXISTS] database_name
[CHARACTER SET charset_name]
[COLLATE collation_name];

参数说明

参数 描述 是否可选
IF NOT EXISTS 如果数据库已存在,防止报错 可选
database_name 数据库名称 必需
CHARACTER SET 指定字符集 可选
COLLATE 指定排序规则 可选

使用 mysqladmin 创建数据库

权限说明: 使用普通用户可能需要特定的权限来创建或删除MySQL数据库。通常建议使用具有适当权限的用户(如root用户)来执行这些操作。

mysqladmin 命令语法

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后创建数据库

# 登录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();

使用 PHP 脚本创建数据库

重要提醒: 原始的 mysql_* 函数已在PHP 7.0中移除,请使用MySQLi或PDO扩展。

使用 MySQLi 面向对象方式

<?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();
?>

使用 MySQLi 过程式方式

<?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);
?>

使用 PDO 方式

<?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;
?>

使用 Python 创建数据库

使用 mysql-connector-python

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';

数据库操作最佳实践

命名规范

  • 使用有意义的、描述性的名称
  • 使用小写字母和下划线(snake_case)
  • 避免使用MySQL保留字
  • 名称长度控制在64个字符以内

字符集选择

  • 新项目一律使用utf8mb4
  • 确保应用程序字符集与数据库一致
  • 考虑国际化需求

安全性考虑

  • 为每个应用创建独立的数据库和用户
  • 遵循最小权限原则
  • 定期备份重要数据
  • 使用强密码

常见问题与解决方案

1. 权限不足错误

ERROR 1044 (42000): Access denied for user 'username'@'localhost' to database 'mydatabase'

解决方案:使用具有CREATE权限的用户,或请求管理员授予权限。

2. 数据库已存在错误

ERROR 1007 (HY000): Can't create database 'mydatabase'; database exists

解决方案:使用CREATE DATABASE IF NOT EXISTS语句。

3. 无效的数据库名称

ERROR 1008 (HY000): Can't drop database 'my-database'; database doesn't exist

解决方案:避免在数据库名称中使用特殊字符,使用下划线代替连字符。

4. 字符集不兼容

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';