SQL 常見約束 非空 預設 唯一 主鍵和外來鍵)

2021-10-09 21:58:37 字數 3345 閱讀 3270

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

分類

六大約束:

not null 非空 :用於保障該字段的值不能為空, 比如姓名、學號等

default 預設: 用於保證該字段有預設值,比如性別、

primary key 主鍵: 用於保證該字段的值有唯一性,並且非空。是能夠唯一的標識一組資料的資料元素;比如說:學號,姓名,年齡,性別,課程號課程中學號是唯一的

unique 唯一約束: 用於保障該字段的值有唯一性,可以為空, 比如座位號

check 檢查約束:mysql中不支援,但不報錯

foreign key 外來鍵:用於限制兩個標的關係 用於保證該字段的值必須來自於主表關聯的值。 一組資料的主鍵是另一組資料的的元素;主鍵約束了外來鍵所在表中不能存在主鍵類之外的值;外來鍵用於與另一張表的關聯。比如:學生表的專業編號、員工表的部門編號。

新增約束表的實際:1)建立表時;2)修改表時

約束新增分類

create

table 表名(

欄位名1 字段型別 列級約束,

欄位名2 字段型別,

欄位名3 字段型別

表級約束

外來鍵取值規則:空值或參照的主鍵值。

(1)插入非空值時,如果主鍵表中沒有這個值,則不能插入。

(2)更新時,不能改為主鍵表中沒有的值。

(3)刪除主鍵表記錄時,可以在建外鍵時選定外來鍵記錄一起級聯刪除還是拒絕刪除。

(4)更新主鍵記錄時,同樣有級聯更新和拒絕執行的選擇。

sql的主鍵和外來鍵就是起約束作用。

#建立約束

create

database stu;

use stu;

create

table major(

id int

primary

key,

majorname varchar(20

));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

default18,

#預設 major int

references major(id)

#外來鍵,mysql不支援);

#新增表級約束

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));

#檢視約束情況

desc stuinfo;

show

index

from stuinfo;

通用寫法:

create

table

ifnot

exists stuinfo(

id int

primary

key,

#主鍵 stuname varchar(20

)not

null

,#非空

gender char(1

),#檢查,mysql不支援

seat int

unique

,#唯一

age int

default18,

#預設 majorid int

,constraint fk_stuinfo_major foreign

key(majorid)

references major(id)

fk_stuinfo_major 列名_當前表名_引用表名

保證唯一性

是否為空

乙個表有多少個

允許組合?

主鍵可以

x最多乙個

允許,但不推薦

唯一可以

可以可以有多個

允許,但不推薦

組合主鍵

drop

table

ifexists stuinfo;

create

table

ifnot

exists stuinfo (

id int

, stuname varchar(20

), gender char(1

), seat int

, age int

, majorid int

,primary

key(id,stuname)

,unique

(seat)

,check

(gender=

'男'or gender=

'女')

,foreign

key( majorid )

references major ( id )

);

結果顯示 id 和stuname 都是主鍵,兩個欄位一摸一樣時不能插入資料。保證兩個欄位的組合是唯一的。

主鍵約束 唯一約束 非空約束 預設約束

1 主鍵約束 每個表中最多有乙個主鍵約束,定義為主鍵的字段不能重複,不能為null值。欄位名 資料型別 primary key primary key 欄位1,欄位2.2 非空約束 字段值不為空 欄位名 資料型別 not null 3 唯一約束 字段值不重複出現 欄位名 資料型別 unique 4 ...

MySQL學習 主鍵約束 非空約束 唯一約束

約束的概念 對錶中的資料進行限定,保證資料的正確性 有效性和完整性 1 主鍵約束 primary key 1.1注意 1 含義 非空且唯一 2 一張表只能有乙個字段為主鍵 3 主鍵就是表中記錄的唯一標識 1.2 在建立表時新增主鍵約束 create table stu id int primary ...

唯一約束,主鍵約束,唯一索引

1.unique約束和primary key約束用來保證同一表中指定的列上沒有重複值,這兩個約束都產生唯一索引確保資料一致性,預設情況下,unique約束產生唯一的非聚集索引,primary key約束產生唯一的聚集索引。primary key約束比unique約束嚴格 primary key列不允...