實體的完整性是經過主鍵(primary key)約束和候選鍵(candidate key)約束來實現的。因此前提條件是要了解鍵的一些概念和分類:sql
key:用於保證元組的惟一性數據庫
舉個例子:例若有 students 表,含有字段 stu_number(學號)id(身份證號)name(姓名) 那麼找出全部可以保證元組惟一性的super-key={{stu_number}, {id}, {stu_number, name}, {id, name}, {stu_number, id}, {stu_number, id, name}}
而後可得 candidate key=stu_number 或 id數據結構
主鍵約束spa
建立主鍵約束線程
建立主鍵後,數據庫會自動建立惟一索引,用於對主鍵的快速查詢,索引名默認爲PRIMARY,也能夠從新自定義命名code
建立候選鍵後,數據庫也會自動建立 UNIQUE 索引對象
能夠在 CREATE TABLE 或 ALTER TABLE 語句中使用 FOREIGN KEY 和 REFERENCES 來實現索引
FOREIGN KEY(column_name, ...)
REFERENCES table_name(column_name, ...)
[ON DELETE reference_option]
[ON UPDATE reference_option]
#column_name 的語法格式爲:column_name [(length)] [ASC | DESC]
#refrence_option 提供選項有:RESTRICT | CASCADE | SET NULL | NO ACTION
#"[]"內的參數爲可選,不加也行,根據實際需求選擇就好
複製代碼
關鍵字ON DELETE
和ON UPDATE
是指定參照的動做,只要涉及這兩個動做,系統就會檢查完整性約束,即refrence_option
,若是沒有明確指定,那麼其默認值爲RESTRICT
事件
NULL
,前提是該字段在參照表中沒有聲明NOT NULL
參照表:聲明瞭FOREIGN KEY
的表 A。被參照表:主鍵被表 A 聲明爲FOREIGN KEY
get
舉個例子:學生有選歷史課,可是如今學校決定不開設歷史課了,要把歷史課從課程表刪除,可是刪除的時候會檢查有沒有被引用,若是存在引用則刪除失敗,這就是RESTRICT
。若是刪除歷史課的同時,將全部學生選課表中的歷史課也刪除,這就是CASCADE
。若是刪除了歷史課,只是將選課表中的歷史課設爲NULL
,這就是SET NULL
,萬一哪天又恢復歷史課呢🤣
關鍵字
TRIGGER(觸發器)
可使用 CREATE TRIGGER 建立觸發器,其格式爲:
CREATE TRIGGER trigger_name trigger_time trigger_event
ON table_name FOR EACH ROW trigger_body
# trigger_name:觸發器惟一命名
# trigger_body:觸發器具體的執行邏輯
# trigger_event:事件類型,INSERT DELETE UPDATE
# trigger_time:觸發時間,參照的是 trigger_event 事件發生時間,AFTER(經常使用) BEFORE
複製代碼
綜上,咱們簡單的總結下
約束:向表中插入數據時,數據庫會判斷數據是否符合約束,不符合則插入失敗
參考: