Skip to main content

MySQL通过示例创建表语句

MySQL创建表语法

CREATE TABLE语句允许您在数据库中创建新表。

下面说明了CREATE TABLE语句的基本语法:

CREATE TABLE [IF NOT EXISTS] table_name(
column_1_definition,
column_2_definition,
...,
table_constraints
) ENGINE=storage_engine;

让我们更详细地检查语法。

首先,在create table关键字之后指定要创建的表的名称。表名在数据库中必须是唯一的。IF NOT EXISTS是可选的。它允许您检查您创建的表是否已经存在于数据库中。如果是这种情况,MySQL将忽略整个语句,并且不会创建任何新表。

其次,在column_list部分指定表中的列列表,列之间用逗号分隔。

第三,可以选择在engine子句中为表指定存储引擎。你可以使用任何存储引擎,比如InnoDB和MyISAM。如果没有明确声明存储引擎,MySQL将默认使用InnoDB。

InnoDB成为MySQL 5.5版以来的默认存储引擎。InnoDB存储引擎带来了关系数据库管理系统的许多好处,如ACID事务、引用完整性和崩溃恢复。在以前的版本中,MySQL使用MyISAM作为默认存储引擎。

下面显示了列定义的语法:

column_name data_type(length) [NOT NULL] [DEFAULT value] [AUTO_INCREMENT] column_constraint;

详情如下:

在列列表之后,可以定义表约束,例如唯一、检查、主键和外键。

例如,如果要将一列或一组列设置为主键,请使用以下语法:

PRIMARY KEY (col1,col2,...)

MySQL创建表语句示例

让我们举一些创建新表的例子。

1) MySQL创建表的简单示例

下面的语句创建了一个名为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;

“任务”表包含以下列:

task_id是tasks表的主键列。这意味着task_id列中的值将唯一标识表中的行。

执行CREATE TABLE语句以创建tasks表后,可以使用CREATE语句查看其结构:

DESCRIBE tasks;

MySQL CREATE TABLE - DESCRIBE table

此图显示了tasks表的数据库图:

MySQL CREATE TABLE - Tasks table

2) MySQL使用外键主键创建表示例

假设每个任务都有一个清单或待办事项清单。要存储任务清单,可以创建一个名为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
);

表检查列表有一个由两列组成的主键。因此,我们使用表约束来定义主键:

PRIMARY KEY (todo_id , task_id)

此外,task_id是引用表tasks的task_id列的外键列,我们使用外键约束来建立这种关系:

FOREIGN KEY (task_id) 
REFERENCES tasks (task_id)
ON UPDATE RESTRICT
ON DELETE CASCADE

在后续教程中,您将了解有关外键约束的更多信息。

此图说明了检查表及其与任务表的关系:

MySQL CREATE TABLE - checklists table

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