數據庫約束
數據庫約束是針對數據庫中的表中的數據進行施加規則和條件,用于確保數據的準確性和可靠性。
數據庫約束類型
1)not null 非空類型 :指定非空類型的列不能存儲null,如果插入的數據是null便會報錯。
2)default 默認約束:當沒有指定插入值時,設定一個默認值進行插入。
當沒有使用default設置默認值時,使用desc table 觀察表的結構時,default這一欄就是null;這時在創建表時使用default設置默認值,就可以觀察到default中設置的默認值。
3)unique唯一約束:指定約束的每列必須有唯一值。
指定列出現相同值會報錯。
4)primary key 主鍵約束:每一行記錄的身份標識,類似not null 和unique的組合,可以由一個或多個列組成,但是一個表里只能有一個主鍵。
主鍵必須是唯一值,且不能包含null。
這是直接創建主鍵:
創建自增主鍵:
自增主鍵一般是用于int ,bigint類型,如果使用主鍵修飾varchar就會報錯。
主鍵值可以不連續,當默認自增主鍵時不設置值插入,由1開始自增,如果插入一條設置好值的記錄,下一條記錄就會從最大的值開始繼續自增。
5)foreign key 外鍵約束:外鍵約束是一種關系型約束,用于兩個表之間進行關聯。
通過這樣的兩個表中,class中的classid通過外鍵去約束student中的classid這樣的方式,此時,class表就叫做父表,student就叫做子表,父表是約束別人的表,具體而言就是student表的數據要出自class表中。
使用外鍵創建一個子表:
和主鍵不同,外鍵是像設置變量一樣單獨一項,foreign key后的括號內填寫的是當前要創建子表時要用外鍵被約束的變量,references是出自的意思,后面接父表的約束別人的變量。
當插入一個不存在于父表的數據(只有被外鍵約束的變量要出自父表),就會報錯;同樣的要是修改一個不存在父表的值也會報錯。
創建一個父表:
這里要注意要約束子表的變量要使用主鍵或unique修飾。
對父表而言,進行刪除和修改的數據已經被子表引用也是不可取的,會報錯,如果父表被外鍵約束的變量沒有被子表引用,修改和刪除是可操作的。
要想直接刪除父表,會報錯,因為要想刪除父表要先刪除父表里的記錄,但是有一條記錄被子表引用,此時就會報錯。所以就要先刪除子表再刪除父表。
表的設計
根據實際的需求,明確要創建幾個表,這幾個表之間的存在什么樣的關系:
先梳理好幾個表中的“實體”(這里的實體例如教務系統中的學生,班級,作業.....)。
再確定實體間的關系。
實體間的關系
不同的關系設計表也是不同的
1)一對一:例如一個學生只能擁有一個賬號,一個賬號也只能被一個學生擁有。
2)一對多:例如一個學生只能在一個班級,但是一個班級可以包含多個學生。
3)多對多:一個學生可以選擇多門課程,一門課程可以包含多個學生。
4)沒關系