創建表的時候可以給欄位添加相應的約束,約束的目的:保證表中數據的合法性,唯一性,有效性。 非空約束(not null):約束欄位不能為NULL 唯一約束(unique):約束欄位不能重覆 主鍵約束(primary key):約束欄位既不能為NULL也不能重覆 外鍵約束(foreign key):阿裡 ...
創建表的時候可以給欄位添加相應的約束,約束的目的:保證表中數據的合法性,唯一性,有效性。
非空約束(not null):約束欄位不能為NULL
唯一約束(unique):約束欄位不能重覆
主鍵約束(primary key):約束欄位既不能為NULL也不能重覆
外鍵約束(foreign key):阿裡巴巴手冊,已經禁止使用外鍵了
檢查f約束(check):Oracle資料庫有check約束,但是Mysql沒有。
註意:我們主要還是記住英文,平時使用的都是英文!
1.非空約束 not null
CREATE TABLE mytable( id INT(10), username VARCHAR(30) NOT NULL, #添加非空約束 PASSWORD VARCHAR(30) );
測試
insert into mytable(id,password) values(1,'123') ; #由於我們的的用戶欄位要求非空,所以會執行失敗 ERROR 1364(HY000) : Filed 'username' doesn't have a default value
2.唯一約束(unique)
測試
列級約束
測試
表級約束
測試
3.主鍵約束(primary key) *
必須記住:一張表的主鍵約束只有一個 ;最好與別的欄位不相關,僅僅代表唯一標識 !
CREATE TABLE mytable( id INT(10) PRIMARY KEY, #添加主鍵約束【屬於列級約束】 username VARCHAR(30), email VARCHAR(30) );
測試
【表級約束】
主鍵值自增:在primary key後面添加auto_increment(從1開始,遞增);
瞭解:Oracle也提供一個自增序列叫做序列(sequence);
4.外鍵約束(foreign key)
關於外鍵約束的相關術語
- 外鍵約束:foreign key
- 外鍵欄位:添加有外鍵約束的欄位
- 外鍵值:外鍵欄位中的每一個值。
t_student中的classno欄位引用t_class表中的cno欄位,此時t_student表叫做子表。t_class表叫做父表。
順序要求:
- 刪除數據的時候,先刪除子表,再刪除父表。
- 添加數據的時候,先添加父表,在添加子表。
- 創建表的時候,先創建父表,再創建子表。
- 刪除表的時候,先刪除子表,在刪除父表。
使用外鍵【Alibaba規範不推薦使用】
create table t_class( cno int ,
cname varchar(255) , #被引用:父表 primary key(cno) ); create table t_student( sno int , sname varchar(255) , #子表 classno int , foreign key(classno) reference t_class(cno) ); #t_student中的classno欄位引用t_class表中的cno欄位,此時t_student表叫做子表。t_class表叫做父表
- reference是引用;
- 外鍵可以為NULL;
- 此時classno中的數據來自cno;
- 外鍵引用的欄位不一定是主鍵,但是起碼是被unique約束;
本文來自博客園,作者:腹白,轉載請註明原文鏈接:https://www.cnblogs.com/wyh518/