約束能保證數(shù)據(jù)的完整性和一致性。
約束類型:主鍵約束钻心、唯一約束鳍鸵、非空約束旦委、默認(rèn)約束奇徒、外鍵約束
主鍵約束(PRIMARY KEY)
自動(dòng)編號(hào)(AUTO_INCREMENT)
- 適用范圍:整型,小數(shù)位數(shù)是0的浮點(diǎn)型
- 自動(dòng)編號(hào)必須與主鍵組合使用(主鍵不一定和它一起使用)
- 默認(rèn)情況下缨硝,起始值為1摩钙,每次的增量為1
主鍵用于唯一地標(biāo)識(shí)表中的每一條記錄,可以定義一列或多列為主鍵查辩。(單一主鍵和復(fù)合主鍵)
- 每張數(shù)據(jù)表只能存在一個(gè)主鍵
- 主鍵保證記錄的唯一性
- 主鍵自動(dòng)為NOT NULL
- 自動(dòng)編號(hào)必須和主鍵一起使用
唯一約束(UNIQUE KEY)
唯一約束保證在一個(gè)字段或者一組字段里的數(shù)據(jù)與表中其它行的數(shù)據(jù)相比是唯一的腺律。
- 唯一約束可以保證記錄的唯一性
- 唯一約束的字段可以為空值
- 每張數(shù)據(jù)表可以存在多個(gè)唯一約束
非空約束(NOT NULL)
非空約束即限制必須為某個(gè)列賦值奕短。
默認(rèn)約束(DEFAULT)
當(dāng)插入記錄時(shí)宜肉,沒有明確的為字段賦值匀钧,則自動(dòng)賦予默認(rèn)值。
外鍵約束(FOREIGN KEY)
FPREIGN KEY(子表外鍵名) REFERENCES 父表名(父表參照字段)
- 父表和子表必須使用相同的存儲(chǔ)引擎谬返,禁止使用臨時(shí)表之斯。
- 數(shù)據(jù)表的存儲(chǔ)引擎只能為InnoDB。
- 外鍵列和參照列必須具有相似的數(shù)據(jù)類型遣铝。數(shù)字的長(zhǎng)度或是否有符號(hào)位必須相同佑刷,但是字符的長(zhǎng)度可以不同。
- 外鍵列和參照列必須創(chuàng)建索引酿炸。如果外鍵列不存在索引瘫絮,MySQL將自動(dòng)創(chuàng)建索引。
外鍵約束的參照操作
FOREIGN KEY(子表外鍵名) REFERENCES tb_name(父表參照字段) [ON DELETE CASCADE]
- CASCADE:從父表刪除或更新行填硕,則自動(dòng)刪除或更新子表中的匹配行
刪除主表時(shí)自動(dòng)刪除從表麦萤。刪除從表,主表不變扁眯。
更新主表時(shí)自動(dòng)更新從表壮莹。更新從表,主表不變姻檀。 - SET NULL:父表刪除或更新行命满,并設(shè)置子表中的外鍵列為NULL。如果使用該選項(xiàng)绣版,必須保證子表的外鍵列沒有指定為NOT NULL
刪除主表時(shí)自動(dòng)更新從表值為NULL胶台。刪除從表,主表不變杂抽。
更新主表時(shí)自動(dòng)更新從表值為NULL诈唬。更新從表,主表不變默怨。 - RESTRICT(NO ACTION):拒絕對(duì)父表的刪除或更新操作
當(dāng)從表記錄不存在讯榕,主表才能刪除。刪除從表匙睹,主表不變愚屁。
當(dāng)從表記錄不存在,主表才能更新痕檬。更新從表霎槐,主表不變。