## 约束
#### 外键约束
通过建立外键关系之后,对主表和从表都会有一定的数据约束效率.
#### 约束的基本概念
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代码来实现的(逻辑外键)
我们说,数据库在开发的时候,尽量让他不要涉及到过多的业务,尽量纯粹的使用他存储、查询数据的功能,所以我们一般不用物理外键,更多使用逻辑外键。
- 数据库介绍
- 数据库基本概念
- SQL介绍
- MySQL服务端架构
- 库操作
- 表操作
- 字段类型
- 整数类型
- 小数类型
- 字符串类型
- 日期/时间类型
- json类型
- 字段属性
- Null
- 默认值
- 列描述
- 主键
- 自动增长
- 唯一键
- 数据库基础操作
- 增
- 删
- 改
- 查
- 运算符
- 算术运算符
- 比较运算符
- 逻辑运算符
- in运算符
- is运算符
- like运算符
- 高级查询
- 联合查询
- 连接查询
- 交叉连接
- 内连接
- 外连接
- Using关键字
- 子查询
- 标量子查询
- 列子查询
- 行子查询
- 表子查询
- exists子查询
- 子查询特定关键字
- 用户权限管理
- 用户管理
- 权限管理
- 外键
- 外键操作
- 外键基本要求
- 约束
- 视图
- 事务安全
- 自动事务
- 手动事务
- 事务特点
- 变量
- 系统变量
- 会话变量
- 局部变量
- 流程结构
- if分支
- while循环
- 函数
- 内置函数
- 字符串函数
- 时间函数
- 数学函数
- 其他函数
- 存储过程
- 与函数的区别
- 存储过程操作
- 存储过程的形参类型
- 触发器
- 触发器概念
- 触发器操作