主要針對列的類型,取值範圍,精度等約束sql
- 對空值的約束。規定某個字段是否爲空 - 對取值範圍的約束。例如,學生成績的字段規定爲 0 - 100 - 數據類型的約束。包括數據類型,長度,精度等。例如經常使用的定長 varchar - 數據格式的約束。例如,學生表中的學號 stu_no 字段,認爲規定前四位爲入學年份,後面是院系的編號等
元組(或稱做 row,一條數據)約束數據庫
表級約束(外鍵)數據結構
以上是一些約束的概念,理論上的,如何實現約束,請往下看。線程
實體的完整性是經過主鍵(primary key)約束和候選鍵(candidate key)約束來實現的。因此前提條件是要了解鍵的一些概念和分類:code
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索引
主鍵約束事件
建立主鍵約束get
建立主鍵後,數據庫會自動建立惟一索引,用於對主鍵的快速查詢,索引名默認爲PRIMARY,也能夠從新自定義命名io
建立候選鍵索引
建立候選鍵後,數據庫也會自動建立 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``` 舉個例子:學生有選歷史課,可是如今學校決定不開設歷史課了,要把歷史課從課程表刪除,可是刪除的時候會檢查有沒有被引用,若是存在引用則刪除失敗,這就是```RESTRICT```。若是刪除歷史課的同時,將全部學生選課表中的歷史課也刪除,這就是```CASCADE```。若是刪除了歷史課,只是將選課表中的歷史課設爲```NULL```,這就是```SET NULL```,萬一哪天又恢復歷史課呢🤣
關鍵字
TRIGGER(觸發器)
能夠使用 CREATE TRIGGER 建立觸發器,其格式爲: ```sql 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
綜上,咱們簡單的總結下
約束:向表中插入數據時,數據庫會判斷數據是否符合約束,不符合則插入失敗
參考: