MySQL创建表
简介:在本教程中,我们将向您展示如何使用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语句在数据库中创建新表。