MySQL 表约束详解
一、为什么要有表的约束?
在数据库设计中,数据类型本身提供了一定的限制,但仅靠数据类型是不够的。通过约束,可以保证插入数据库表中的数据符合预期。约束的本质是通过技术手段,强制程序插入正确的数据。
二、表的约束
2.1 空属性
一般有两个值:null(默认)和 not null(不为空)。
使用 desc 指令查看表的属性中 Null 这一列,默认情况下显示为 YES,表示该属性可以为空。设置 not null 后,该列显示为 NO,即该属性对应的数据不能为 NULL。
CREATE TABLE test (
id INT NOT NULL,
name VARCHAR(50) NOT NULL
);
当尝试插入 NULL 值时,MySQL 会拦截并报错,提示该列不能为空。
2.2 默认值
默认值用于指定当未传入实参时使用的值。在表的属性中,Default 列表示默认值。
设置方法是在属性后面加上 default + 默认值。
CREATE TABLE users (
id INT,
status INT DEFAULT 1
);
若插入数据时未指定该字段,则自动使用默认值。
注意:
not null和default不冲突,而是互补的。not null要求插入的数据不能为空,default在不插入数据时使用默认值。两者可结合使用:not null default 123456。
2.3 列描述
列描述使用 comment 关键字,专门用来描述字段含义,供程序员或 DBA 了解。它不会像 not null 那样拦截数据,仅作为元数据保存。
查看描述可使用 show create table 指令。
2.4 zerofill
zerofill 与整数类型配合使用。int(10) 中的 10 代表宽度。zerofill 的作用是:如果插入的数据宽度小于指定宽度,则在前面自动补 0。
例如 int(10) zerofill,插入 123 显示为 0000000123。实际存储值不变。
若插入数据宽度超过指定数字,则不再补 0。
2.5 主键
主键 (primary key) 唯一约束字段数据,不能重复,不能为空。一张表中最多只能有一个主键。
2.5.1 复合主键
复合主键指使用多个字段共同作为主键。只有当所有主键字段都重复时,才会触发主键不能重复的机制。


