【数据库】数据库约束 第四章 数据库约束文章目录第四章 数据库约束前言一、NOT NULL非空约束二、default默认值约束三、unique唯一约束四、primary key 主键约束五、外键约束六、check约束总结前言数据库约束是对表中的数据施加规则。就像我们注册账号时的必添项那就是约束本期会讲解怎么实现一、NOT NULL非空约束约束需要在创建表的时候添加非公约数就是指填写表的那一栏不能为空,为空报错.create table 表名 (列名 类型 not null列名 类型);示例:用desc来查看表结构null那里会显示no二、default默认值约束插入列的时候剩下没被指定列就是默认值我们可以指定默认值create table 表名 (列名 类型列名 类型 default ‘默认值’);示例:default前 :default后 :三、unique唯一约束唯一约束也就是插入数据唯一每次插入修改数据的时候都会先进行查询(数据库自动进行)判定插入修改的数据是否已经存在如果存在了就会失败。怎么实现呢create table 表名 (列名 类型 unique列名 类型);示例:用update修改也会报错Distinct是本来数据库服务器存储的内容中已经有重复的了只是展示给用户时展示的是去重的效果 , unique是存的数据就不能有重复四、primary key 主键约束主键就是不能重复并且不能为空。一张表中只能有一个主键create table 表名 (列名 类型 primary key列名 类型);示例:插入为空报错 :插入为重复报错 :设计数据表时 , 一般都会给表设定一个主键列主键列通常是一个整数ID手动指定ID的值可能会遇到重复的情况数据库提供了自增主键功能主键的值不需要手动分配 会自动分配,自增组件会记录最大值 ,哪怕把表内容删掉,也会按原来原本最大值继续加一create table 表名 (列名 类型 primary key auto_increment 列名 类型);示例 :提问 :同一个表的数据 , 分布在不同服务器上(分库分表) , 这样的情况自增主键是否还有效?答 :服务器之间相互查询开销太大 , 因此自增主键仅限于单节点的MySQL服务器场景使用该情况的解决方案有很多核心理念是类似的 : 分布式唯一ID 时间戳 主机标识 随机因子 的哈希函数五、外键约束涉及两张表子表和父表被涉及的子表列对应父表的行create table 父表名字 (列名 类型 primary key auto_increment列名 类型);create table 子表名 (列名 类型 列名1 类型foreign key (列名1 ) references 父表名 (涉及的列名 ) );示例 :针对子表的插入会对父表先进行查询查到了才会插入否则报错。用update也是一样触发查询示例 :如果子表与父表中的一列建立了联系我们把父表那一列delete删除的时候会报错示例 :提问 :电商中一张父表:商品表一张子表:订单表如使用外键想要下架一个商品的时候因子表有与父表相关联的所以删不掉怎么办可以使用标志位进行逻辑删除返回商品列表的时候就通过标记位进行删除。逻辑删除意味着数据库内容越来越多但这不是主要矛盾硬盘不值钱不用纠结。提问 :create table 父表名字 (列名 类型 列名 类型);create table 子表名 (列名 类型 列名1 类型foreign key (列名1 ) reference 父表名 (涉及的列名 ) );为什么会报错 ?回答 :要求子类引用的那一类要带有索引而主键或者唯一键会自动创建索引六、check约束check会自动检查填入的列是否符合要求就像性别那一栏填入沃尔玛购物袋是不合理的。create table 表名 (列名1 类型check(列名1‘名称’ or 列名1‘名称’) );示例 :插入成功 :插入失败 :但这个是从mysql8.0.16开始支持的一些老项目是用5.7总结本期主要讲了not null非空主键 , default默认值约束 , unique唯一约束 , primary key主键约束 , 外键约束 , check约束等 . 请大家放心使用~~