## 約束
#### 外鍵約束
通過建立外鍵關系之后,對主表和從表都會有一定的數據約束效率.
#### 約束的基本概念
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循環
- 函數
- 內置函數
- 字符串函數
- 時間函數
- 數學函數
- 其他函數
- 存儲過程
- 與函數的區別
- 存儲過程操作
- 存儲過程的形參類型
- 觸發器
- 觸發器概念
- 觸發器操作