MySQL CREATE TABLE

摘要在本教程中,我们将向您展示如何使用 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约束之外,列还可以具有其他约束,例如CHECKUNIQUE
  • DEFAULT指定列的默认值。
  • AUTO_INCREMENT表示每当向表中插入新行时,列的值都会自动递增 1。每个表最多有一个AUTO_INCREMENT列。

在列列表之后,您可以定义表约束,例如UNIQUECHECKPRIMARY KEYFOREIGN 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_datedue_dateDATE列。因为这些列没有NOT NULL约束,所以它们可以存储NULL 。 start_date 列的默认值是当前日期。换句话说,如果在插入新行时没有为 start_date 列提供值,则 start_date 列将采用数据库服务器的当前日期。
  • statuspriority是不允许NULL TINYINT列。
  • description列是接受NULL TEXT列。
  • created_at是一个TIMESTAMP列,接受当前时间作为默认值。

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

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

DESCRIBE tasks;Code language: SQL (Structured Query Language) (sql)
MySQL 创建表 - 描述表

下图是tasks表的数据库图:

MySQL CREATE TABLE - 任务表

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是引用表taskstask_id列的外键列,我们使用外键约束来建立这种关系:

FOREIGN KEY (task_id) 
    REFERENCES tasks (task_id) 
    ON UPDATE RESTRICT 
    ON DELETE CASCADECode language: SQL (Structured Query Language) (sql)

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

下图说明了checklists表及其与tasks表的关系:

MySQL CREATE TABLE - 检查清单表

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

本教程有帮助吗?