DDL語言之常見約束(mysql)

2021-10-05 13:51:24 字數 4385 閱讀 8248

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

②分類:六大約束

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...