MySQL資料庫四大約束詳解
約束
非空約束(not null):
在定義資料表的時候,預設情況下所有欄位是允許為空值的,如果需要禁止欄位為空,那麼就需要在建立表的時候顯示指定.
指定一個欄位不為空的方式就是在欄位定義後加上 not null.
非空約束不因對通過insert語句插入的資料起作用,而且對於使用update語句進行更新是也起作用.
唯一約束(unique):
它用於防止一個特定的列中兩個記錄具有一定的值,如果希望一個欄位在表中的值是唯一的.那麼就可以將唯一約束設定到這個欄位上,設定方式就是在欄位定義後面加上unique,也可以在加上非空約束.
唯一約束可以新增到多個欄位當中,也就是一張表中可以存在多個唯一約束,但是這樣的單欄位約束只能約束''欄位A的值在表中不重複'',''欄位B的值在表中不重複'',卻不能約束欄位A的值和欄位B的值同時重複,複合唯一約束是建立在多個欄位上的約束,被約束的欄位不能同時重複,就是在表中複合唯一約束的兩個欄位,不能同時出現第二次.比如,一條資料是 (1,2),就不能再出現一條同時包含(1,2)的資料.
語法:
constraint 約束的名字 unique (欄位A,欄位B)
給建好的表新增約束:
alter table 表名 add constraint 約束名 unique(欄位1,欄位2);
刪除約束:
alter table 表名drop index 約束名;
主鍵約束(primary key)
主鍵約束是非常重要的,而且主鍵約束是外來鍵關聯的基礎條件,主鍵約束為表之間的關聯提供了連結點.
主鍵必須能夠唯一標識一條記錄,也就是主鍵欄位中的值必須是唯一的,而且不能包含null值,也可以說主鍵約束是唯一約束和非空約束的組合.定義主鍵非常簡單.
語法:
在欄位定義後 新增primary key 關鍵字就行.
除了這種單一欄位組成的主鍵之外,還可以有多個欄位來組成主鍵,這樣的主鍵被稱為複合主鍵或者聯合主鍵.複合主鍵的定義個複合唯一約束的定義類似.
語法:
constraint 主鍵名 primary key(欄位1,欄位2),
儘管在建立表的時候定義一個主鍵是好習慣,但是如果表建立了沒有定義主鍵,那麼也可以在後面新增主鍵,不過通過這種方式新增主鍵有一個附件條件,那就是組成的主鍵的欄位必須包含 not null約束,如果沒有新增非空約束的欄位上建立主鍵,系統就會報錯.
語法:
alter table 表名 add constraint 主鍵名 primary key(欄位1,欄位2);
刪除主鍵:
alter table 表名 drop primary key;
自增列(主要用在給主鍵產生一個唯一值)
create table course(
cid int primary key auto_increment, /*產生一個自動增長的值*/
cname varchar(10)
);
不從1開始的例子
create table course(
cid int primary key auto_increment, /*產生一個自動增長的值*/
cname varchar(10)
) auto_increment=1000;
注意:
使用了自增賦值,就不要手動賦值,否則就會使用手動賦的值.
外來鍵約束( foreign key)
當一些資訊在表中重複出現的時候,我們就要考慮將他們提取到另外一張表中,然後在原表中引用新建立表中的資料.
在刪除一個表中的資料的時候,如果有其他的表存在外來鍵關係,那麼就會刪除失敗.必須把所有有關的資料刪除之後,才能刪除成功.
語法:
foreign key (外來鍵欄位) references 外來鍵表名(外來鍵表中的主鍵欄位)