約束能保證數(shù)據(jù)的完整性和一致性。
約束類型:主鍵約束、唯一約束、非空約束、默認約束、外鍵約束
主鍵約束(PRIMARY KEY)
自動編號(AUTO_INCREMENT)
- 適用范圍:整型,小數(shù)位數(shù)是0的浮點型
- 自動編號必須與主鍵組合使用(主鍵不一定和它一起使用)
- 默認情況下,起始值為1,每次的增量為1
主鍵用于唯一地標識表中的每一條記錄,可以定義一列或多列為主鍵。(單一主鍵和復合主鍵)
- 每張數(shù)據(jù)表只能存在一個主鍵
- 主鍵保證記錄的唯一性
- 主鍵自動為NOT NULL
- 自動編號必須和主鍵一起使用
唯一約束(UNIQUE KEY)
唯一約束保證在一個字段或者一組字段里的數(shù)據(jù)與表中其它行的數(shù)據(jù)相比是唯一的。
- 唯一約束可以保證記錄的唯一性
- 唯一約束的字段可以為空值
- 每張數(shù)據(jù)表可以存在多個唯一約束
非空約束(NOT NULL)
非空約束即限制必須為某個列賦值。
默認約束(DEFAULT)
當插入記錄時,沒有明確的為字段賦值,則自動賦予默認值。
外鍵約束(FOREIGN KEY)
FPREIGN KEY(子表外鍵名) REFERENCES 父表名(父表參照字段)
- 父表和子表必須使用相同的存儲引擎,禁止使用臨時表。
- 數(shù)據(jù)表的存儲引擎只能為InnoDB。
- 外鍵列和參照列必須具有相似的數(shù)據(jù)類型。數(shù)字的長度或是否有符號位必須相同,但是字符的長度可以不同。
- 外鍵列和參照列必須創(chuàng)建索引。如果外鍵列不存在索引,MySQL將自動創(chuàng)建索引。
外鍵約束的參照操作
FOREIGN KEY(子表外鍵名) REFERENCES tb_name(父表參照字段) [ON DELETE CASCADE]
- CASCADE:從父表刪除或更新行,則自動刪除或更新子表中的匹配行
刪除主表時自動刪除從表。刪除從表,主表不變。
更新主表時自動更新從表。更新從表,主表不變。 - SET NULL:父表刪除或更新行,并設置子表中的外鍵列為NULL。如果使用該選項,必須保證子表的外鍵列沒有指定為NOT NULL
刪除主表時自動更新從表值為NULL。刪除從表,主表不變。
更新主表時自動更新從表值為NULL。更新從表,主表不變。 - RESTRICT(NO ACTION):拒絕對父表的刪除或更新操作
當從表記錄不存在,主表才能刪除。刪除從表,主表不變。
當從表記錄不存在,主表才能更新。更新從表,主表不變。