這此來學習一下約束
約束可以有兩種分類一種是等級分類,一種是類型分類
按等級分類:表級約束、列級約束。
按類型分類:主鍵約束(primary key)、非空約束(not null)、默認約束(default)、外鍵約束(foreing key)、檢查約束(check)、唯一約束(unique)
一、等級分類
列級約束:
在一個列定義後用空格隔開開始定義列約束
格式 :
create table 表名(
列名 類型 約束,
列名 類型 約束1 約束2,
);
如:
從圖中可以看到列級約束在每一列後邊用空格隔開,一行列可以有多個約束
表級約束:
在全部列定義後開始定義表級約束
格式:
create table 表名(
列名 類型 ,
列名 類型,
constraint 約束名 約束類型(列名),
constraint 約束名 約束類型(列名1,列名2)
);
,
5、6行表級約束,約束可以約束多列
非空和默認約束不能使用在表級約束中
列級約束和表級約束區別
表級約束 | 列級約束 | |
作用 | 一個列上 | 多個列 |
位置 | 定義在要約束列的後邊 | 當所有列定義完之後定義約束 |
類型 | 主鍵、外鍵、檢查、唯一 |
前4個+非空和默認 |
二、類型約束
現在創建一個表,這個表中創建了一個表,用到了主鍵,非空,默認,檢查,唯一
a、非空約束
非空約束只能約束列
非空約束後說明插入這條數據時該列數值不能爲空
我們剛纔創建的teacher表name加了非空約束
那我們添加兩條數據看一下
首先插入一條完整的數據,插入成功
然後我們插入一條數據不插入姓名,於是就報錯了
b.主鍵約束
可以修飾任何數據類型
被修飾後,不能重複且不能爲空
一張表只能有一個主鍵
id被primary key被修飾了,所以我們插入數據
現在已經插入了一條數據
當我們在插入一條id爲一的數據,就會報錯
c、默認約束
默認約束是當該列未輸入該數據時,此數據設置未默認的值。
比如在教師的性別默認不輸入便爲男
我們插入數據時並沒有輸入性別,可是查詢查看時候性別自動爲男
d、檢查約束
檢查約束對輸入條件進行了限制,年齡在0-120之間。
我們插入數據在120以外會如何?
可以看到當輸入不符合範圍會報錯。
e、唯一約束
一張表可以有多個外鍵
唯一約束就是在這一列中不能出現重複的數據和主鍵約束有點像
主鍵約束和唯一約束報的錯是一樣的。
但是唯一約束不能爲空,主鍵約束可以爲空
f、外鍵約束
建立在兩個表之間鏈接一列或者多列,通過外鍵將一個表中的主鍵加到另一個表中
第一個表中的主鍵便是第二個表的外鍵
第一個表
第二張表
這便兩者創建了聯繫
on delete cascade(級聯刪除):當父表中的列被刪除時,同時刪除子表中相對應的記錄
on delete set null(級聯置空):當父表中的列被刪除時,子表中相對應記錄的外鍵列置空
使用外鍵的建議:
1)當父表中沒有對應的記錄時,不要將記錄添加到子表
2)不要更改父表中的值而導致子表中的記錄孤立
3)子表存在與父表對應的記錄時,刪除父表記錄時 應該級聯刪除或級聯置空
4)刪除父表前,先刪子表