①含義:一種限制,用於限制表中的資料,為了保證表中的資料的準確和可靠性。
②分類:六大約束
1)not null: 非空,用於保證該字段的值不能為空, 比如姓名、學號等
2)default: 預設,用於保證該字段有預設值, 比如性別
3)primary key: 主鍵,用於保證該字段的值具有唯一性,並且非空 ,比如學號、員工編號等
4)unique: 唯一,用於保證該字段的值具有唯一性,可以為空,比如座位號
5)check:檢查約束【mysql中不支援】,比如年齡、性別等
6)foreign key: 外來鍵,用於限制兩個表的關係,用於保證該字段的值必須來自於主表的關聯列的值。在從表新增外來鍵約束,用於引用主表中某列的值。比如學生表的專業編號,員工表的部門編號,員工表的工種編號等
③新增約束的時機:
1、建立表時
2、修改表時
④約束的新增分類:
新增分類
位置支援的約束型別
是否可以起約束名
列級約束
列的後面
語法都支援,但外來鍵沒有效果
不可以表級約束
所有列的下面
預設和非空不支援,其他支援
可以(主鍵沒有效果)
create
table 表名(
欄位名 字段型別 列級約束,
表級約束
);
⑤主鍵和唯一的大對比:
保證唯一性
是否允許為空
乙個表中可以有多少個
是否允許組合主鍵✓
✗至多有1個
✓,但不推薦唯一✓
✓(最多乙個null)
可以有多個
✓,但不推薦
補充:是否允許組合
(並不是說兩個或者多個都變成了主鍵,真正的主鍵其實還是只有乙個,只有當兩個或多個的值完全一樣時,才會報錯。如果認為是兩個或多個都分別是主鍵,那麼肯定其中任何乙個的值都不可以重複。而這裡可以允許其中一列的值重複,但是兩列或者多列不可以同時重複)
⑥外來鍵:
1、要求在從表設定外來鍵關係
2、從表的外來鍵列的型別和主表的關聯列的型別要求一致或者相容,名稱無要求
3、主表的關聯列必須是乙個key(一般是主鍵或唯一)
4、插入資料時,先插入主表,再插入從表; 刪除資料時,先刪除從表,再刪除主表
create
database constrain;
#一、建立表時新增約束
#1、新增列級約束
/*語法:
直接在欄位名和型別後面追加約束型別即可。
只支援:預設、非空、主鍵、唯一
*/use constrain;
create
table stuinfo(
id int
primary
key,
#主鍵 stuname varchar(20
)not
null
,#非空
gender char(1
)check
(gender=
'男'or gender=
'女')
,#檢查
seat int
unique
,#唯一
age int
default18,
#預設 majorid int
#外來鍵)
;create
table major(
id int
primary
key,
majorname varchar(20
));desc stuinfo;
#檢視stuinfo表中所有的索引,包括主鍵、外來鍵、唯一
show
index
from stuinfo;
#2、新增表級約束
/*語法:在各個欄位的最下面
【constraint 約束名】 約束型別(欄位名)
*/drop
table
ifexists stuinfo;
create
table stuinfo(
id int
, stuname varchar(20
),gender char(1
),seat int
, age int
, majorid int
,constraint pk primary
key(id)
,constraint uq unique
(seat)
,constraint ck check
(gender=
'男'or gender=
'女')
,constraint fk_stuinfo_major foreign
key(majorid)
references major(id));
#通用的寫法:★
create
table
ifnot
exists stuinfo(
id int
primary
key,
stuname varchar(20
)not
null
, gender char(1
),age int
default18,
seat int
unique
, majorid int
,foreign
key(majorid)
references major(id));
show
index
from stuinfo;
#二、修改表時新增約束
/*1、新增列級約束
alter table 表名 modify column 欄位名 字段型別 新約束;
2、新增表級約束
alter table 表名 add【constraint 約束名】約束型別(欄位名)【外來鍵的引用】;
*/#1、新增非空約束
alter
table stuinfo modify
column stuname varhar(20)
notnull
;#2、新增預設約束
alter
table stuinfo modify
column age int
default18;
#3、新增主鍵
#①列級約束
alter
table stuinfo modify
column id int
primary
key;
#②表級約束
alter
table stuinfo add
primary
key(id)
;#4、新增唯一鍵
#①列級約束
alter
table stuinfo modify
column seat int
unique
;#②表級約束
alter
table stuinfo add
unique
(seat)
;#5、新增外來鍵
alter
table stuinfo add
foreign
key(majorid)
references major(id)
;#三、修改表時刪除約束
#1、刪除非空約束
alter
table stuinfo modify
column stuname varchar(20
);#2、刪除預設約束(同1)
#3、刪除主鍵
alter
table stuinfo drop
primary
key;
#4、刪除唯一鍵
show
index
from stuinfo;
alter
table stuinfo drop
index 唯一鍵的名字;
#5、刪除外來鍵
alter
table stuinfo drop
foreign
key 外鍵名;
DDL語言,常見約束
含義,限制表中的資料,保證表中的資料準確。分類 六大約束 not null 非空 default 預設值 primary key 主鍵 unique 唯一性,但是可以為空 check 檢查約束 mysql不支援 foreign key 外來鍵 約束的分類 列級約束 六大約束都可以,外來鍵沒有效果,約...
DDL語言之常見的資料型別
數值型 1 整型 tinyint 1 smallint 2 mediumint 3 int integer 4 bigint 8 特點 特點 字元型 較短的文字 char m,可以省略,預設1 varchar m 較長的文字 text.blob 較長的二進位制資料 m表示字元的長度 char是固定長...
DDL語言之基礎查詢(三)
一 語法 select 查詢列表 from 表名 二 特點 1 查詢列表可以是字段 常量 表示式 函式,也可以是多個 2 查詢結果是乙個虛擬表 三 示例 1 查詢單個字段 select 欄位名 from 表名 2 查詢多個字段 select 欄位名,欄位名 from 表名 3 查詢所有字段 sele...