MySQL创建表

时间:2019-11-20 08:52:09  来源:igfitidea点击:

简介:在本教程中,我们将向您展示如何使用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;

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

首先,在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;

详细信息如下:

  • thecolumn_name指定列的名称。
    每列都有特定的数据类型和可选的大小,例如VARCHAR(255)

  • NOT NULL约束确保该列将不包含NULL。
    除了NOT NULL约束之外,列还可以具有其他约束,例如CHECK和UNIQUE。

  • DEFAULT指定该列的默认值。

  • AUTO_INCREMENT指示每当将新行插入表中时,列的值就会自动增加一。
    每个表最多具有一个AUTO_INCREMENT列。

在列列表之后,您可以定义表约束,例如UNIQUE,CHECK,PRIMARY KEY和FOREIGN KEY。

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

PRIMARY KEY (col1,col2,...)

MySQL CREATE TABLE语句示例

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

1)MySQL CREATE TABLE简单示例

以下语句创建一个名为task的新表:

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是一个自动增量列。
    如果您使用INSERT语句在表中插入新行而未为task_id列指定值,则MySQL将自动为task_id生成一个从1开始的顺序整数。

  • 标题列是可变字符串列,最大长度为255。
    这意味着您不能在该列中插入长度大于255的字符串。
    NOT NULL约束表示该列不接受NULL。
    换句话说,当您插入或更新此列时,必须提供一个非NULL值。

  • start_date和Due_date是DATE列。
    因为这些列没有NOT NULL约束,所以它们可以存储NULL。
    start_date列的默认值为当前日期。
    换句话说,如果您在插入新行时未提供start_date列的值,则start_date列将采用数据库服务器的当前日期。

  • 状态和优先级是TINYINT列,不允许使用NULL。

  • description列是一个接受NULL的TEXT列。

  • created_at是TIMESTAMP列,它接受当前时间作为默认值。

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

一旦执行了CREATE TABLE语句以创建任务表,就可以使用DESCRIBE语句查看其结构:

DESCRIBE tasks;

此图显示了任务表的数据库图:

2)带有外键主键示例的MySQL CREATE TABLE

假设每个任务都有一个清单或任务清单。
要存储任务清单,可以创建一个名为清单的新表,如下所示:

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

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

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

此图说明了核对表表及其与任务表的关系:

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