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;
说明如下:将column_name 指定列的名称。每列都有特定的数据类型和可选的大小,例如VARCHAR(255)
NOT NULL 约束表示该列不能包含NULL值。除了NOT NULL约束,一列还可以包含CHECK、UNIQUE等约束。
将DEFAULT指定列的默认值。
的AUTO_INCREMENT 表示该列的值自动增加1,每当自动一个新行插入到表中。每个表只能包含一个AUTO_INCREMENT 列。
还可以自定义列的约束,如UNIQUE,CHECK,PRIMARY KEY和FOREIGN KEY。
1、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;
该表包含以下列:task_id列,整型类型,自动增长列。当使用该INSERT语句在表中插入新行,不需要为task_id列指定值,task_id列自动从1开始生成一个顺序整数。
title列是字符串类型,最大长度为255。这意味着不能在该列中插入长度大于255的字符串。该NOT NULL约束指示该列不接受NULL。换句话说,当插入或更新此列时,必须提供一个非NULL值。
start_date和due_date是DATE类型列。由于这些列没有NOT NULL约束,因此可以存储NULL。
status和priority列是TINYINT类型,而且不容许列值NULL。
description列是TEXT类型,该列值可以为NULL。
created_at列是一TIMESTAMP类型,接受当前时间作为默认值。
task_id列是tasks表的主键列。这意味着task_id列中的值将作为表唯一标识。
tasks表的内容:
2、CREATE TABLE带有外键的示例:
每个task都有一个任务清单。要存储任务清单,可以创建一个新表,名称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
);
checklists具有一个由两列组成的主键。使用表约束来定义主键:
PRIMARY KEY (todo_id , task_id)
task_id外键列引用task_id表的列tasks,使用外键约束来建立这种关系:
FOREIGN KEY (task_id)
REFERENCES tasks (task_id)
ON UPDATE RESTRICT
ON DELETE CASCADE
后面会详尽介绍外键约束
checklists表及其与tasks表的关系: