摘要:在本教程中,我们将向您展示如何使用 MySQL CREATE TABLE
语句在数据库中创建新表。
MySQL CREATE TABLE
语法
CREATE TABLE
语句允许您在数据库中创建新表。
下面说明了CREATE TABLE
语句的基本语法:
CREATE TABLE [IF NOT EXISTS] table_name(
column_1_definition,
column_2_definition,
...,
table_constraints
) ENGINE=storage_engine;
Code language: SQL (Structured Query Language) (sql)
让我们更详细地研究一下语法。
首先,在CREATE TABLE
关键字之后指定要创建的表的名称。表名在数据库中必须是唯一的。 IF NOT EXISTS
是可选的。它允许您检查您创建的表是否已存在于数据库中。如果是这种情况,MySQL 将忽略整个语句并且不会创建任何新表。
其次,您在column_list
部分中指定表的列列表,列之间用逗号分隔。
第三,您可以选择在ENGINE
子句中指定表的存储引擎。您可以使用任何存储引擎,例如 InnoDB 和 MyISAM。如果没有显式声明存储引擎,MySQL将默认使用InnoDB。
从 MySQL 5.5 版本开始,InnoDB 成为默认存储引擎。 InnoDB 存储引擎带来了关系数据库管理系统的许多好处,例如 ACID 事务、引用完整性和崩溃恢复。在之前的版本中,MySQL使用MyISAM作为默认存储引擎。
下面显示了列定义的语法:
column_name data_type(length) [NOT NULL] [DEFAULT value] [AUTO_INCREMENT] column_constraint;
Code language: SQL (Structured Query Language) (sql)
详细信息如下:
column_name
指定列的名称。每列都有特定的数据类型和可选大小,例如VARCHAR(255)
- 这
NOT NULL
约束确保该列不会包含NULL
。除了NOT NULL
约束之外,列还可以具有其他约束,例如CHECK和UNIQUE 。 -
DEFAULT
指定列的默认值。 -
AUTO_INCREMENT
表示每当向表中插入新行时,列的值都会自动递增 1。每个表最多有一个AUTO_INCREMENT
列。
在列列表之后,您可以定义表约束,例如UNIQUE 、 CHECK 、 PRIMARY KEY和FOREIGN KEY 。
例如,如果要将一列或一组列设置为主键,可以使用以下语法:
PRIMARY KEY (col1,col2,...)
Code language: SQL (Structured Query Language) (sql)
MySQL CREATE TABLE
语句示例
让我们举一些创建新表的示例。
1)MySQL CREATE TABLE
简单示例
以下语句创建一个名为tasks
的新表:
CREATE TABLE IF NOT EXISTS tasks (
task_id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
start_date DATE,
due_date DATE,
status TINYINT NOT NULL,
priority TINYINT NOT NULL,
description TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=INNODB;
Code language: SQL (Structured Query Language) (sql)
任务表具有以下列:
task_id
是一个自动递增列。如果您使用INSERT
语句向表中插入新行而不指定task_id
列的值,MySQL 将自动为task_id
生成一个从 1 开始的连续整数。-
title
列是一个可变字符串列,其最大长度为255。这意味着不能在该列中插入长度大于255的字符串。NOT NULL
约束指示该列不接受NULL
。换句话说,在插入或更新此列时必须提供非 NULL 值。 -
start_date
和due_date
是DATE
列。因为这些列没有NOT NULL
约束,所以它们可以存储NULL
。 start_date 列的默认值是当前日期。换句话说,如果在插入新行时没有为 start_date 列提供值,则 start_date 列将采用数据库服务器的当前日期。 -
status
和priority
是不允许NULL
TINYINT
列。 -
description
列是接受NULL
TEXT
列。 -
created_at
是一个TIMESTAMP
列,接受当前时间作为默认值。
task_id
是tasks
表的主键列。这意味着task_id
列中的值将唯一标识表中的行。
执行CREATE TABLE
语句创建tasks
表后,您可以使用DESCRIBE
语句查看其结构:
DESCRIBE tasks;
Code language: SQL (Structured Query Language) (sql)

下图是tasks
表的数据库图:

2) MySQL CREATE TABLE
带外键主键示例
假设每个任务都有一个清单或待办事项列表。要存储任务清单,您可以创建一个名为checklists
的新表,如下所示:
CREATE TABLE IF NOT EXISTS checklists (
todo_id INT AUTO_INCREMENT,
task_id INT,
todo VARCHAR(255) NOT NULL,
is_completed BOOLEAN NOT NULL DEFAULT FALSE,
PRIMARY KEY (todo_id , task_id),
FOREIGN KEY (task_id)
REFERENCES tasks (task_id)
ON UPDATE RESTRICT ON DELETE CASCADE
);
Code language: SQL (Structured Query Language) (sql)
表checklists
有一个由两列组成的主键。因此,我们使用表约束来定义主键:
PRIMARY KEY (todo_id , task_id)
Code language: SQL (Structured Query Language) (sql)
另外, task_id
是引用表tasks
的task_id
列的外键列,我们使用外键约束来建立这种关系:
FOREIGN KEY (task_id)
REFERENCES tasks (task_id)
ON UPDATE RESTRICT
ON DELETE CASCADE
Code language: SQL (Structured Query Language) (sql)
您将在后续教程中了解有关外键约束的更多信息。
下图说明了checklists
表及其与tasks
表的关系:

在本教程中,您学习了如何使用 MySQL CREATE TABLE
语句在数据库中创建新表。