数据库约束是为了更好的维护数据,分别有以下几种约束类型
约束类型 | 说明 |
---|---|
NOT NULL | 表示某列不能存储 NULL值 |
UNIQUE | 保证了某列的每行必须是唯一的值 |
DEFAULT | 规定了没有给列赋值时的默认值 |
PRIMARY KEY | NOT NULL 和 UNIQUE 的结合版,确保了某个或两个及以上的列有唯一标识 |
FOREIGN KEY | 确保了表中的值匹配另一个表的值的参照完整性 |
CHECK(了解) | 保证列中的值符合指定的条件,MySQL使用时不报错,但忽略该约束 |
非空约束
在创建表时的某个列后加入 not null 后,就形成了非空约束,该列的值不能为null
当查询表的结构的时候,NULL那列就会变成NO,代表该列不能存储 NULL值
唯一约束
在某列后面协商 unique 关键字就可以形成唯一约束,此时该列的每一行只能存储唯一的值
当插入两个相同值时就会报错
默认值约束
当我们对部分列插入数据时,未被赋值的列会存储一个NULL
由表的结构中我们也能够看出来
在创建表时可以指定默认值
此时只插入id,那么姓名就会是无名氏
主键约束
当一个列同时拥有 not null 和 unique
他们组合在一起相当于是 primary key,此时运行后 id 就被设置为了主键
对于整数类型的主键,一般可以搭配自增auto_increment来使用,当未指定插入数据时,就会插入当前编号最大值+1
每次插入一个新数据时,都会自动插入一个新 id 的值,id会自动自增。
值得注意的是,id可能会出现不连续的情况,这是因为id在执行某些错误语句前也会自增,并且删除数据后,id并不会随之减少
外键约束
有一张学生表,除了存储姓名外还存储了他们的班级
有一张班级表,每个班级id对应了一个班级
但是当我们插入一个错误的班级id 时,也会成功插入到表中
所以这与我们的预期不符
所以需要用到外键约束
外键约束语法:
foreign key (字段名) references 主表(列名)
一定需要注意的是 先创建 class 表,然后再创建student表
有了外键约束,那么当插入一个不存在的班级就会报错