mysql 字段常見約束

2021-10-06 09:54:58 字數 3362 閱讀 5085

含義:一種限制,用於限制表中的資料,為了保證表中資料的準確性和可靠性

分類---六大約束:

not null:非空,用於保證該字段的值不能為空;比如使用者名字段、學號字段等必填項;

default:預設值,用於保證該字段有預設值;比如頭像等非必填項,但又需要有個值的字段;

primary key:主鍵,用於保證該字段的值具有唯一性並且非空;比如學號,員工編號等;

unique:唯一,用於保證該字段的值具有唯一性但可以為空;比如座位號,可以不寫,但是寫了就不能重複;

check:檢查約束【mysql中不支援】;比如年齡、性別,可以檢查插入的值是否為設定好的值或設定範圍內的值;

foreign key:外來鍵,用於限制兩個表的關係的,用於保證該字段的值必須來自於主表關聯列的值;比如學生表的專業編號、員工表的部門編號等;

新增約束的時機:

1、建立表時

2、修改表時

約束的新增分類:

1、列級約束

六大約束語法上都支援,但外來鍵約束沒有效果

語法:直接在欄位名和型別後面追加 約束型別 即可;只支援預設、非空、主鍵、唯一

//建立學員表

create table stuinfo(

id int primary key,//主鍵約束

stuname varchar(20) not null,//非空約束

gender char(1) check(gender='男' or gender='女'),//檢查約束(mysql不支援,但不報錯)

seat int unique,//唯一約束

age int default 18,//預設約束

majorid int references major(id)//外來鍵(在這加不起作用)

);//建立專業表

create table major(

id int primary key,

majorname varchar(20)

);

2、表級約束

六大約束中除了非空和預設,其他都支援

語法:在各個欄位的最下面加【constraint 約束名】約束型別(欄位名),中括號裡的可以省略,會自動生成索引名

create table stuinfo(

id int,

stuname varchar(20),

gender char(1),

age int default 18,

seat int,

majorid int,

//在這裡開始加約束

primary key(id),//主鍵約束

unique(seat),//唯一約束

foreign key(majorid) references major(id)//外來鍵

);

3、通用寫法

create table stuinfo(

id int primary key,

stuname varchar(20) not null,

age int default 18,

seat int unique,

majorid int,

//加外來鍵

constraint fk_stuinfo_major foreign key(majorid) references major(id)

//一般外來鍵起名字,並且開頭用fk_,後面接本表名,後面再接外來鍵主表名,通俗易懂

//foreign key()寫的是本表也叫從表的欄位名,references major(id)後面接的是主表名和主表關聯的欄位名

);

主鍵和唯一的對比:

1、都可以保證唯一性

2、主鍵不可以為空,唯一可以為空(但也只允許一條記錄為null)

3、主鍵每個表中至多有乙個,唯一可以有多個

4、主鍵和唯一都可以組合,但不推薦(組合即讓兩個或多個欄位同為主鍵或唯一,只有當這些欄位都相同時才報錯)

外來鍵的特點:

1、要求在從表設定外來鍵關係

2、從表的外來鍵列型別和主表的關聯列型別要求一致或相容,名稱無要求

3、主表的關聯列必須是乙個key(一般是主鍵或唯一)

4、插入資料時,要先插入主表,再插入從表

5、刪除資料時,先刪除從表,再刪除主表

6、外來鍵有乙個更新時和刪除時的選項,有以下四種,預設是restrict

①cascade:父表delete、update的時候,子表會delete、update掉關聯記錄;

②set null:父表delete、update的時候,子表會將關聯記錄的外來鍵字段所在列設為null,所以注意在設計子表時外來鍵不能設為not null;

③restrict:如果想要刪除父表的記錄時,而在子表中有關聯該父表的記錄,則不允許刪除父表中的記錄;

④no action:同 restrict,也是首先先檢查外來鍵;

修改表時新增約束:

語法:1、新增列級約束:alter table 表名 modify 欄位名 型別 新約束;

2、新增表級約束:alter table 表名 add 【constraint 名稱】 約束型別(欄位名) 【外來鍵引用】

//所有支援列級新增的都可以這麼新增

alter table stuinfo modify column stuname varchar(20) not null;

alter table stuinfo add unique(seat);

//外來鍵只支援表級新增,用下面的方式

alter table stuinfo add constraint fk_stuinfo_major foreign key(majorid) references major(id);

修改表時刪除約束:

//刪除欄位stuname的非空約束

alter table stuinfo modify column stuname null;

//刪除預設age約束

alter table stuinfo modify column age int;

//刪除主鍵約束

alter table stuinfo drop primary key;

//刪除唯一約束

alter table stuinfo drop index seat;

//刪除外來鍵約束

alter table stuinfo drop doreign key fk_stuinfo_major;

mysql 字段約束

5.6 操作表的約束 80 5.6.1 mysql支援的完整性約束 81 5.6.2 設定非空約束 not null,nk 81 5.6.3 設定欄位的預設值 default 82 5.6.4 設定唯一約束 unique,uk 84 5.6.5 設定主鍵約束 primary key,pk 85 5....

mysql欄位約束

為了確保資料的完整性和唯 性,關係型數 據庫通過約束機制來實現目。一.unique 唯一性約束 值不可重複 二.not null 非空約束 值不可為空 三.default 預設值約束 當增加資料時沒有插 值時,會自動插 預設值 四.check 檢查約束 mysql不支援該約束,但寫入語句不會報錯 五...

mysql欄位約束

特點 唯一且不能為空!當主鍵為數值時,為了方便維護,可以設定主鍵為自增 auto increment 示例 建立user表,指定id為主鍵,並指定主鍵自增 第一種方式 主鍵自增和主鍵宣告放一起 create table user id int primary key auto increament,...