PHP MySQL 创建数据库

在开始使用MySQL数据库之前,我们需要先创建一个数据库。本教程将介绍如何使用PHP创建MySQL数据库,包括MySQLi扩展和PDO(PHP数据对象)两种方式。

前提条件

要创建MySQL数据库,您需要:

  • MySQL服务器已安装并运行
  • 具有创建数据库权限的MySQL用户账号
  • PHP环境中已启用MySQLi或PDO扩展

使用MySQLi创建数据库

MySQLi扩展提供了面向对象和过程式两种方式来创建数据库。

1. 面向对象方式

<?php
// 数据库连接参数
$servername = "localhost";
$username = "username";
$password = "password";

// 创建连接
$conn = new mysqli($servername, $username, $password);

// 检查连接
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}

// 创建数据库
$sql = "CREATE DATABASE myDB";
if ($conn->query($sql) === true) {
    echo "数据库创建成功";
} else {
    echo "创建数据库错误: " . $conn->error;
}

// 关闭连接
$conn->close();
?>

2. 过程式方式

<?php
// 数据库连接参数
$servername = "localhost";
$username = "username";
$password = "password";

// 创建连接
$conn = mysqli_connect($servername, $username, $password);

// 检查连接
if (!$conn) {
    die("连接失败: " . mysqli_connect_error());
}

// 创建数据库
$sql = "CREATE DATABASE myDB";
if (mysqli_query($conn, $sql)) {
    echo "数据库创建成功";
} else {
    echo "创建数据库错误: " . mysqli_error($conn);
}

// 关闭连接
mysqli_close($conn);
?>

使用PDO创建数据库

PDO(PHP数据对象)也提供了创建数据库的功能。

<?php
// 数据库连接参数
$servername = "localhost";
$username = "username";
$password = "password";

// 尝试连接数据库服务器
try {
    $conn = new PDO("mysql:host=$servername;", $username, $password);
    
    // 设置PDO错误模式为异常
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    // 创建数据库
    $sql = "CREATE DATABASE myDB";
    $conn->exec($sql);
    
    echo "数据库创建成功";
} catch(PDOException $e) {
    echo "创建数据库错误: " . $e->getMessage();
}

// 关闭连接
$conn = null;
?>

指定字符集创建数据库

创建数据库时,可以指定数据库使用的字符集和排序规则,这对于支持中文等非ASCII字符非常重要。

MySQLi方式

<?php
// 创建带字符集的数据库
$sql = "CREATE DATABASE myDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci";
if ($conn->query($sql) === true) {
    echo "带字符集的数据库创建成功";
} else {
    echo "创建数据库错误: " . $conn->error;
}
?>

PDO方式

<?php
// 创建带字符集的数据库
$sql = "CREATE DATABASE myDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci";
$conn->exec($sql);
echo "带字符集的数据库创建成功";
?>

检查数据库是否存在

在创建数据库之前,通常需要检查该数据库是否已经存在,以避免出现错误。

MySQLi方式

<?php
// 检查数据库是否存在
$dbname = "myDB";

// 查询所有数据库
$sql = "SHOW DATABASES LIKE '$dbname;
$result = $conn->query($sql);

if ($result->num_rows == 0) {
    // 数据库不存在,创建数据库
    $sql = "CREATE DATABASE $dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci";
    if ($conn->query($sql) === true) {
        echo "数据库创建成功";
    } else {
        echo "创建数据库错误: " . $conn->error;
    }
} else {
    echo "数据库已经存在";
}
?>

PDO方式

<?php
// 检查数据库是否存在
$dbname = "myDB";

try {
    // 尝试连接到指定数据库
    $testConn = new PDO("mysql:host=$servername;dbname=$dbname;", $username, $password);
    echo "数据库已经存在";
    $testConn = null;
} catch(PDOException $e) {
    // 数据库不存在,创建数据库
    $sql = "CREATE DATABASE $dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci";
    $conn->exec($sql);
    echo "数据库创建成功";
}
?>

常见的字符集和排序规则

字符集 排序规则 描述
utf8mb4 utf8mb4_unicode_ci 推荐使用,支持所有Unicode字符,包括emoji表情
utf8mb4 utf8mb4_general_ci 性能更好,但排序准确性稍差
utf8 utf8_unicode_ci 较早的UTF-8实现,不支持所有Unicode字符
latin1 latin1_swedish_ci 默认字符集,仅支持基本拉丁字符

MySQL数据库命名规则

  • 数据库名可以包含字母、数字、下划线(_)
  • 数据库名不能以数字开头
  • 数据库名不能包含空格或特殊字符(如!@#$%^&*等)
  • 数据库名最长为64个字符
  • 不区分大小写,但建议保持一致
  • 避免使用MySQL保留字作为数据库名

MySQL保留字

创建数据库时,应避免使用以下MySQL保留字作为数据库名:

SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, TABLE,
DATABASE, INDEX, VIEW, JOIN, WHERE, ORDER, BY, GROUP, HAVING,
AND, OR, NOT, IN, BETWEEN, LIKE, AS, ON, FROM, TO, VALUES,
SET, NULL, TRUE, FALSE, PRIMARY, KEY, FOREIGN, REFERENCES,
UNIQUE, DEFAULT, AUTO_INCREMENT, LIMIT, OFFSET, ASC, DESC

最佳实践

  • 创建数据库时指定字符集和排序规则,推荐使用utf8mb4和utf8mb4_unicode_ci
  • 在创建数据库前检查是否已存在
  • 使用有意义且符合命名规范的数据库名
  • 避免使用MySQL保留字作为数据库名
  • 为不同的项目创建独立的数据库
  • 定期备份数据库
  • 限制数据库用户的权限,遵循最小权限原则