一、 約束的含義和分類 1.1約束的含義:是一種限制,用於限製表中的數據,保證數據的完整性和一致性。 1.2約束的分類: ①not null:非空,保證欄位不能為空。違反約束不會報錯,但是會有警告,適用於說有的類型。 ②default:預設約束,當數據插入的時候,指定的欄位如果沒有數據插入,即插入默 ...
一、 約束的含義和分類
1.1約束的含義:是一種限制,用於限製表中的數據,保證數據的完整性和一致性。
1.2約束的分類:
①not null:非空,保證欄位不能為空。違反約束不會報錯,但是會有警告,適用於說有的類型。
②default:預設約束,當數據插入的時候,指定的欄位如果沒有數據插入,即插入預設值。
③primary key:主鍵,保證欄位具有唯一性,並且非空,等價於唯一+非空的組合。
④unique:唯一,用於保證欄位的唯一性,可以為空。
⑤check:檢查約束,mysql不支持。
⑥foreign key:外鍵約束,用於約束兩個表的關係,用於保證該欄位的值必須來自於主表的關聯列的值。在從表的添加的外鍵約束,用於引用主表中某列的值。
1.3添加約束
列級約束:語法上六大約束都支持,但是外鍵約束沒有效果。【mysql不支持檢查約束】
表級約束:除了非空和預設,其他都支持。
添加時機:創建表時、修改表時。
二、 唯一約束和主鍵約束比較、外鍵解析
1.主鍵唯一鍵的比較
2.外鍵解析
①在從表設置外鍵關係
②從表的外鍵列的類型和主表的關聯列類型要求一致或者相容
③主表的關聯列必須是一個key,主鍵或者是唯一鍵
④插入數據的時候,先插入主表,然後插入從表
⑤刪除數據的時候,先刪除從表,再刪除主表
三、 創建表時添加約束
語法概述:
Create table 表名(
欄位名 欄位類型 列級約束,
欄位名 欄位類型,
表級約束
)
1.添加列級約束
①在欄位類型之後直接添加,可以有多個直接加空格隔開
②支持:預設、主鍵、唯一、非空
列級約束不能將外鍵約束添加成功。
2.添加表級約束
【constraint 約束名】 添加約束名字,是可選的。
①主鍵的命名失效,主鍵名字只能是primary
②外鍵添加成功,別名也成功添加
③check 檢查約束,mysql不支持
3.約束的通用寫法
四、修改表時添加約束
1.添加列級約束
alter table 表名 modify column 欄位名 欄位類型 新約束
2.添加表級約束a
alter table 表名 add [constraint 約束名] 約束類型(欄位名) [外鍵的引用]
[1]添加非空約束
alter table userchen modify column userchen varchar(20) not null;
[2]添加預設約束
[3]添加主鍵
[4]添加唯一約束
[5]添加外鍵【表級約束】
五、刪除約束
[1]刪除非空約束
[2]刪除預設約束
[3]刪除主鍵
[4]刪除唯一鍵
[5]刪除外鍵
六、級聯刪除
情況一、當刪除父類數據時,對應從表的數據也將被刪除
情況二、級聯刪除置null