在本教程中,你将学习如何使用MySQL CREATE TABLE语句在数据库中创建新表。
CREATE TABLE语句允许你在数据库中创建一个新表。
CREATE TABLE语句的基本语法CREATE TABLE [IF NOT EXISTS] table_name(
column1 datatype constraints,
column2 datatype constraints,
...
) ENGINE=storage_engine;
在此语法中:
table_name:这是要创建的表的名称。
column1、column2等:表中列的名称。
datatype:每列的数据,如INT、VARCHAR、DATE等。
constraints:这些是可选的约束,如NOT NULL、UNIQUE、PRIMARY KEY和FOREIGN KEY。
如果创建的表的名称已存在于数据库中,则会出现错误。为了避免出现错误,可以使用IF NOT EXISTS选项。
在MySQL中,每个表都有一个存储引擎,如InnoDB或MyISAM。ENGINE子句允许你指定表的存储引擎。
如果没有明确指定存储引擎,MySQL将使用默认的存储引擎InnoDB。
InnoDB从MySQL 5.5版本开始成为默认的存储引擎。InnoDB存储引擎提供了关系数据库管理系统的几个优点,包括ACID事务支持、引用完整性和崩溃恢复。在早期版本中,MySQL使用MyISAM作为默认存储引擎。
MySQL CREATE TABLE语句示例让我们举一些创建新表的例子。
CREATE TABLE基本语句示例
以下示例使用CREATE TABLE语句创建一个名为tasks的新表:
CREATE TABLE tasks (
id INT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
start_date DATE,
due_date DATE
);
tasks表有四列:
id是一个INT列,用作主键列。
title是VARCHAR列,不能为NULL。
start_date和end_date是date列,可以为NULL。
要执行CREATE TABLE语句:
首先,使用具有CREATE权限的帐户从终端使用MySQL命令登录MySQL服务器:
mysql -u root -p
它将提示你输入密码:
输入密码:********
接下来,创建一个名为test的新数据库:
CREATE DATABASE test;
如果数据库已经存在,可以在执行上述语句之前先将其删除:
DROP DATABASE test;
然后,选择要使用的测试数据库:
USE test;
之后,执行CREATE TABLE语句:
CREATE TABLE tasks (
id INT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
start_date DATE,
due_date DATE
);
最后,列出测试数据库中的所有表:
SHOW TABLES;
输出:
+----------------+
| Tables_in_test |
+----------------+
| tasks |
+----------------+
1 row in set (0.00 sec)
它显示了我们创建的表tasks。
创建带有外键的表示例
假设每个task都有一个检查表。要存储任务的检查表,可以创建一个名为checklists的新表,如下所示:
CREATE TABLE checklists(
id INT,
task_id INT,
title VARCHAR(255) NOT NULL,
is_completed BOOLEAN NOT NULL DEFAULT FALSE,
PRIMARY KEY (id, task_id),
FOREIGN KEY (task_id)
REFERENCES tasks (id)
ON UPDATE RESTRICT
ON DELETE CASCADE
);
表checklists有一个由两列组成的主键。因此,我们需要使用表约束来定义主键:
PRIMARY KEY (id, task_id)
此外,task_id是引用tasks表的id列的外键列,因此,我们使用外键约束来建立这种关系:
FOREIGN KEY (task_id)
REFERENCES tasks (id)
ON UPDATE RESTRICT
ON DELETE CASCADE