赞
踩
目录
创建数据表时,为表指定规则,后续的增改删操作,都需要遵循指定的规则。
数据库的约束,是为了更严格的校验数据,保证数据的正确性,引入了更多的检查操作,但同时也增加了系统开销。
约束类型 | 简介 |
not null | 指定某列不能为 null |
unique | 指定某列中的值必须都为该列中的唯一 |
default | 指定某列在没有赋值时的默认值 |
primary key | 指定某列或多列的结合,有且只有唯一标识 |
foreign key | 保证一个表中的数据匹配另一个表中的对应数据 |
check | 保证列中的值符合指定条件,MySQL中无该功能(不做介绍) |
语法 | create table 表名(列名 类型 not null, ......); |
解释 | 创建表,表中某列或多列数据增加空值约束; |
语法 | create table 表名(列名 类型 unique, ......); |
解释 | 创建表,表中某列或多列数据增加唯一值约束; |
语法 | create table 表名(列名 类型 default 默认值, ......); |
解释 | 创建表,表中某列或多列数据增加默认值约束; (如果没有指定默认值,则当数据为空时,系统将默认返回 null ) |
概念 | 被主键约束的列是非空且唯一的,它集合了 not null 和 unique 的特点。 |
作用 | 主键的使用是为了确保某列或多列的结合有唯一身份标识,有助于便捷地找到表中地对应记录。 |
特点 | 一个表只能有一个主键。 |
语法 | create table 表名(列名 类型 primary key, ......); |
解释 | 创建表,表中某列数据或多列数据的结合增加主键约束; |
关键字 | auto_increment |
作用 | 自动增量,自增主键。 |
适用情况 | 适用于整型数据。适用于数据储存于单个数据库服务器的情况。 |
语法 | create table 表名(列名 类型 primary key auto_increment, ......); |
解释 | 创建表,表中某列数据或多列数据的结合增加主键约束,主键根据最大值自动增量; |
当数据分散储存在多个服务器时,主键自增将无法生效(每台服务器的主键将各自自增,无法关联)。
在多服务器情况下,通常使用字符串形式生成主键的方式,确保主键唯一性,方法如下:
时间戳 | + | 服务器编号 | + | 随机因子 |
在不同时刻将生成不同的字符串 | 不同的主机将生成各自的字符串 | 随机生成的字符串 |
作用 | 用于关联其他表的主键或唯一键,以达到表格互相约束的目的。 |
概念 | 子表:被约束的表叫做子表。 父表:约束其他表的表称为父表。 |
语法 | create table 表名(列名 类型 , ...... , foreign key(本表约束列名) references 父表名(父表约束列名)); |
解释 | 创建表,表中某列数据作为约束和父表约束列相关联。 |
子表在数据行创建时,会检查数据行的外键约束列是否为父表关联列的合法数值,从而确定子表数据行是否插入成功。这里使用的检查方式,就是通过查询索引完成的。
只有在表创建时,指定了主键约束,索引才能创建成功。因此,如果一个数据表需要作为父表,那么这个表就必须指定主键约束。
从上文可以看到,父表对子表插入的数据行是存在约束的,只有子表数据行的外键约束列数值为父表关联列的合法数值时,数据行才能插入成功。
同样的,子表对父表也存在约束。在父表删除数据行时,如果关联列对应的子表外键约束仍存在数据,那么父表对应的数据行不能被删除。
沿用上表:
阅读指针 -> 《MySQL表数据的 CRUD 进阶操作 -- 聚合查询》
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。