Skip to content

MySQL 创建表

数据库表是 MySQL 等关系型数据库中存储数据的基本结构。每个表都有一个唯一的名称,由列(定义数据字段)和行(代表单个记录)组成。

使用 PHP 创建 MySQL 表(MySQLi 和 PDO)

Section titled “使用 PHP 创建 MySQL 表(MySQLi 和 PDO)”

SQL CREATE TABLE 语句用于定义和创建一个新表。

示例 CREATE TABLE 语句:

让我们创建一个名为 MyGuests 的表,包含 ID、名字、姓氏、电子邮件和注册日期等列:

CREATE TABLE MyGuests (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50) UNIQUE, -- Added UNIQUE constraint
reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

列定义解释:

  • id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY:
  • firstname VARCHAR(30) NOT NULL:
  • lastname VARCHAR(30) NOT NULL:类似于 firstname。
  • email VARCHAR(50) UNIQUE:
  • reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP:

选择数据类型:

选择正确的数据类型(例如,INT、VARCHAR、TEXT、DATE、DATETIME、TIMESTAMP、DECIMAL、BOOLEAN)对于数据完整性和效率至关重要。请查阅 MySQL 文档以获取完整的列表和描述。

以下示例展示了如何使用 PHP 结合 MySQLi 和 PDO 执行此 CREATE TABLE 语句。

<?php
declare(strict_types=1);
$servername = "localhost";
$username = "your_username"; // Replace with your DB username
$password = "your_password"; // Replace with your DB password
$dbname = "myDB"; // Replace with your DB name
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
error_log("Connection failed: " . $conn->connect_error);
die("Database connection error. Please try again later.");
}
// Set character set (recommended)
$conn->set_charset('utf8mb4');
// SQL to create table
$sql = "CREATE TABLE MyGuests (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50) UNIQUE,
reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)";
// Execute query
if ($conn->query($sql) === TRUE) {
echo "Table MyGuests created successfully";
} else {
// Handle error - check if table already exists, or other SQL error
error_log("Error creating table: (" . $conn->errno . ") " . $conn->error);
echo "Error creating table: " . $conn->error;
}
// Close connection
$conn->close();
?>
<?php
declare(strict_types=1);
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "myDB";
// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
error_log("Connection failed: " . mysqli_connect_error());
die("Database connection error.");
}
// Set character set
mysqli_set_charset($conn, 'utf8mb4');
// SQL to create table
$sql = "CREATE TABLE MyGuests (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50) UNIQUE,
reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)";
// Execute query
if (mysqli_query($conn, $sql)) {
echo "Table MyGuests created successfully (Procedural)";
} else {
error_log("Error creating table: (" . mysqli_errno($conn) . ") " . mysqli_error(conn));
echo "Error creating table: " . mysqli_error($conn);
}
// Close connection
mysqli_close(conn);
?>
<?php
declare(strict_types=1);
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "myDBPDO"; // 假定 PDO 示例使用不同的数据库
try {
// 使用 PDO 创建连接
// 注意:在其中创建表之前,数据库必须已经存在。
$conn = new PDO("mysql:host=$servername;dbname=$dbname;charset=utf8mb4", $username, $password);
// 设置 PDO 错误模式为异常(推荐)
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// SQL to create table
$sql = "CREATE TABLE MyGuests (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50) UNIQUE,
reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)";
// 使用 exec(),因为 CREATE TABLE 不返回结果集
$conn->exec($sql);
echo "Table MyGuests created successfully (PDO)";
} catch(PDOException $e) {
// 处理 PDO 错误(例如,表已存在 - SQLSTATE[42S01])
error_log("PDO Error: " . $e->getMessage());
echo "Database error: " . $e->getMessage(); // 显示适当的消息
} catch(Exception $e) {
error_log("General Error: " . $e->getMessage());
echo "An unexpected error occurred.";
}
// Close connection
$conn = null;
?>
  • **权限:**你的 PHP 脚本中指定的数据库用户必须拥有在目标数据库中创建表所需的权限(例如,CREATE)。
  • **错误处理:**实现健壮的错误处理。检查表是否已经存在(MySQL 错误代码 1050,SQLSTATE 42S01),或是否发生其他 SQL 错误。
  • **幂等性:**创建表的脚本可能会运行多次。考虑在 CREATE TABLE 语句中添加 IF NOT EXISTS(CREATE TABLE IF NOT EXISTS MyGuests (...)),以防止表已存在时出错。
  • **数据库设计:**在创建表之前,仔细规划你的表结构、关系和数据类型。良好的数据库设计对于应用程序性能和可维护性至关重要。