数据表的创建
在 MySQL 中创建完数据库后,需要先使用 “USE 数据库名” 的形式指定在哪个数据库中进行操作,然后再执行创建数据表的 SQL 语句,或直接使用 “数据库名.数据表名” 的形式创建数据表。
一、创建空数据表:
MySQL 创建数据表需要遵循一定的语法格式,这些语法格式为创建数据表提供了模板依据,同时,遵循一定的语法格式创建数据表也降低了出错的概率。
1. 语法格式:
CREATE TABLE [IF NOT EXISTS] 表名(
字段1,数据类型 [约束条件] [默认值],
字段2,数据类型 [约束条件] [默认值],
字段3,数据类型 [约束条件] [默认值],
…
[表约束条件]
);
2. 创建数据表时,必须指定数据表的表名称,表名称在 Windows 操作系统上不区分大小写,在 Linux 操作系统上区分大小写。如需在Linux操作系统上不区分大小写,要在 MySQL 配置文件 my.cnf 中添加一项配置:
lower_case_table_names=1
3. 在创建数据表时,还需指定数据表中每一列的名称和数据类型,多个列之间需要以逗号进行分隔。
4. 在 MySQL 8.x 版本中建议不再为 INT 类型数据指定显示长度。
二、创建数据表时指定主键:
在 MySQL 中创建数据表时,可以为数据表指定主键。主键又被称为主码,包含一列或多列,能够唯一标识表中的一行记录。同时,主键列数据必须唯一且不能为空。主键可以分为单列主键和多列联合主键。
1. 单列主键:只包含数据表中的一个字段,可以在定义数据列的同时指定主键,也可以在定义数据表中所有的列之后指定主键。
(1) 在定义列时指定主键。
语法格式:
字段 数据类型 PRIMARY KEY [默认值]
(2) 定义完数据表中的所有列之后指定主键。
语法格式:
[CONSTRIANT 约束条件名] PRIMARY KEY [字段名]
2. 多列联合主键:只能在定义完数据表的所有列之后进行指定。
语法格式:
PRIMARY KEY [字段1, 字段2, 字段3, …, 字段n]
三、创建数据表时指定外键:
外键可以关联数据库中的两张表,其对应的是数据库中的参照完整性。一张表的外键可以为空,也可以不为空。当外键不为空时,每一个外键的值必须等于另一个表的主键的某个值。一张表的外键可以不是本表的主键,但其对应着另一张表的主键。在一张表中定义了外键,不允许删除另一表中具有关联关系的行数据。
1. 由外键引申出两个概念:
(1) 主表(父表):两个表具有关联关系时,关联字段中主键所在的表为主表(父表)。
(2) 从表(子表):两个表具有关联关系时,关联字段中外键所在的表为从表(子表)。
2. 语法格式:
[CONSTRAINT 外键名] FOREIGN KEY 字段1[, 字段2, 字段3, …] REFERENCES 主表名 主键列1[, 主键列2, 主键列3, …]
其中:
· 外键名:定义外键时为数据表指定的外键名称。
在同一张数据表中,外键的名称必须唯一。即,同一张数据表中不能有相同名称的外键。
· FOREIGN KEY:指定外键包含哪些字段,可以是一个字符,也可以是多个字段的组合。
· REFERENCES:指定关联的主表名称。
· 主表名:主键所在的表的名称。
· 主键列:主表中定义的主键字段,可以是一个字段,也可以是多个字段的组合。
注意:一张表的外键与其关联的另一张表的主键的数据类型必须相同。
四、创建数据表时指定字段非空:
在 MySQL 中,可以在创建数据表时指定数据表的某个字段或某些字段的值不能为空。如果将某个字段或某些字段设置为非空约束条件,则在向数据表插入数据时,必须为这些字段指定相应的值,否则 MySQL 会报错。
语法格式:
字段名称 数据类型 NOT NULL
五、创建数据表时指定默认值:
在 MySQL 中如果为字段指定了默认值,则在向数据表插入数据时,如果没有为当前字段指定任何值,则 MySQL 会自动为该字段赋值为指定的默认值。
语法格式:
字段名称 数据类型 DEFAULT 默认值
六、创建数据表时指定主键默认递增:
MySQL 支持将整数类型的主键设置为默认递增类型,此时,在向数据表插入数据时,可以不用指定整数类型主键的值,MySQL 会将该表的整数类型主键值自动加 1 (默认从 1 开始)。
语法格式:
字段名称 数据类型 AUTO_INCREMENT
七、创建数据表时指定存储引擎:
MySQL 支持在创建数据表时为该数据指定相应的存储引擎。一个数据中可以包含不同存储引擎的数据表。
语法格式:
ENGINE=存储引擎名称
八、创建数据表时指定编码:
MySQL 支持在创建数据表时指定编码格式,也可以在创建数据表后修改数据表编码格式。
语法格式:
DEFAULT CHARACTER SET 编码 COLLATE 校对规则
或
DEFAULT CHARSET=编码 COLLATE=校对规则