🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 约束 #### 外键约束 通过建立外键关系之后,对主表和从表都会有一定的数据约束效率. #### 约束的基本概念 1. 当一个外键产生时:外键所在的表(从表)会受制于主表数据的存在从而导致数据不能进行某些不符合规范的操作(不能插入主表不存在的数据). 2. 如果一张表被其他表外键引入,那么该表的数据操作就不能随意:必须保证从表数据的有效性(不能随便删除一个被从表引入的记录). #### 外键约束的概念 可以在创建外键的时候,对外键约束进行选择性的操作. 语法: ~~~ ~~~ 如: ~~~ alter table 从表 add foreign key(从表外键字段) references 主表(主表主键) on update cascade on delete set null; ~~~ 约束模式有三种: 1. district : 严格模式,默认的. 不允许操作. 2. cascade : 级联模式,一起操作,主表变化,从表跟着变化. 3. set null : 置空模式,主表变化,从表对应记录设置为空. 前提是从表中对应的外键字段允许为空. **外键约束主要约束的对象是主表操作:从表就是不能插入主表不存在的数据.** 通常在进行约束时候的时候,需要指定操作:update和delete. 常用的约束模式: on update cascade, on delete set nul,**更新级联,删除置空.** #### 约束作用 保证数据的完整性:**主表与从表的数据要一致** 正是因为外键有非常强大的数据约束作用,而且可能导致数据在后台变化的不可控。导致程序在进行设计开发逻辑的时候,没有办法去很好的把握数据(业务),**所以外键比较少使用**。 Zm:数据的一致性需求肯定存在,实现它有两个方式 一种就是数据库自带的外键约束(物理外键),一种还是我们用php代码来实现的(逻辑外键) 我们说,数据库在开发的时候,尽量让他不要涉及到过多的业务,尽量纯粹的使用他存储、查询数据的功能,所以我们一般不用物理外键,更多使用逻辑外键。