赞
踩
约束就是让数据库帮助程序猿更好的检查数据是否正确。
先创建一个表
NULL 这一列描述了是否允许是空。
当加上了 not null 之后,NULL 这一列就变成不允许为 NULL。
name 这一列未被指定,所以是 YES。
可以发现往 id 这一列插入 null 记录时,就报错了。
创建一个表
UNI 就是 unique 的简写。
再次插入 id 为1的记录是就报错了,而插入新的 id 记录时就不会报错了。
数据库是先查找这一条记录是否有相同的,若没有才会插入。
一个列可以可以同时加上多个约束。
例如加上 not null 和 unique :
PRI 就是 接下来要介绍的 primary key 的简写。
可以根据报错信息得出被 primary key 约束的 id 列既不能是 NULL 的,也不能是重复的记录。
因为主键和 unique 都有先查询的过程,mysql 就会默认给 primary key 和 unique 这样的列自动添加索引(后面会讲),来提高查询的速度 。
注意:
圈出的部分表示插入 id 的时候可以手动指定,也可以不手动指定(null),mysql 会自动生成。
这个操作不是说设成null值,而是交给数据库设成自增主键。
演示:
id 会一直按照最大值下后排列。
也可以手动指定!!!
演示:
在下一条数据插入一个101。
每次插入数据的时候,mysql 就会自动找到上一条记录的 id ,在这个基础之上,进行自增。
如果先是采用自增插入之后,再采用手动插入,之后再采用自增插入会从6开始还是会从102开始?
演示:
可以发现是接着上一条记录的 id ,是按照之前的最大值来往后累加的!!!
插入记录的时候如果有具体的数据,则以插入的为准。
如果没有,就以设置的默认值为准
可以查看学生是在哪个班级,看学生是否存在。
学生表和班级表两个表相互约束就称为外加约束。
没有100班级,也就是非法的数据。
可以简单理解为不是本班的学生。
为了让mysql帮助程序猿完成上述的的检查动作,就引入了外键约束!!!
此时外键约束的含义就是要求 student 表里的务必要在 class 表里的 id 列中存在的。
\
可以看到第一条记录,因为calss表中 1 是存在的,因此插入成功。
但是 101 是不存在的,因此插入失败,此时就不能随便的插入了。
学生表中的数据,要依赖班级表的数据,班级表的数据要对学生表产生约束力。
就像是父亲对孩子的约束力。
此处起到约束作用的班级表就叫做“父表”(parent);被约束的表就叫做“字表”(child)。
子表也可以反过来约束父表。
无论是添加还是修改,只要子表里的记录没在父表中存在,都会产生同样的报错信息。
如果要想删除,只能先删除子表,再删除父表。
要想创建外键,就要求父表的对应的列,得有 primary key 或者 unique 约束!!!
此时没有primary key 或者 unique 进行约束,所以就报错了。
现在考虑一个场景:电商
有一个商品表,商品表里有很多商品。
还有一个订单表,订单里有商品id这一列。
商品表:
goods(id, name , unitprice);
存在商品编号、商品名称、商品价格。
例如:
商品编号:1、商品名称:衣服 、商品价格: 100
商品编号:2、商品名称:鞋子 、商品价格: 200
订单表:
order(orderid, goodsid, time);
存在订单id、商品id、订单生成时间。
例如:
订单id: 1、商品id: 1、订单生成时间: 2022-11-10
订单id: 2、商品id: 2、订单生成时间: 2022-11-12
订单中的商品id必须要在商品表中存在。
现在这个衣服订单太多了,要将这个商品下架。
需要怎么做?
解决思路:
要想对商品下架并不是删除记录了。
而是把“是否下架”这个属性设置成是。
这种方法叫逻辑删除,并不是真正的删除。
逻辑删除引发的问题:
解决办法:
由于硬盘空间是不值钱的,因此充钱可以解锁海量的硬盘空间!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。