MySQL中的約束,列級約束,表級約束

2021-10-25 01:50:42 字數 4738 閱讀 7594

總結了一些課上的筆記和**,可以執行看看

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

約束的分類:

1.not null:非空,用於保證該字段的值不能為null

2.default:預設值,用於保證該字段在不設定具體的內容時,有乙個預設值。即開始存資料的時候不不傳也會有乙個值

3.primary key:主鍵,用於保證該字段的值的唯一性,也就是說被設定為primary key的列中的值不能夠重複,主鍵不能為空。主鍵還有乙個作用就是可以通過主鍵查詢到資料表中唯一的對應的行。主鍵可以是沒有任何意義的字段。

4.unique:唯一,用於保證該字段的值的唯一性,可以為空。

5.check:檢查約束(mysql中不支援)

6.foreign key:外來鍵,外來鍵一般引入另外乙個表的主鍵,用來約束當前欄位的取值範圍。

新增約束的時機:

1.建立表的時候

2.修改表的時候

約束的新增分類:

列級約束:所有的約束語法上都支援,但是外來鍵的約束沒有效果

表級約束:除了非空,預設其他的都支援

1、列級約束即字段級約束,用於限制字段取值範圍,常通過字段有效性規則來實現,比如:性別只能是男或女。

2、表級約束及字段間約束,用於限制兩個欄位間的取值約束,比如:入學日期大於出生日期。

建立表時新增列約束:

例項:建立major表

create

table major(

id int

primary

key,

majorname varchar(20

));

例項:建立學生資訊表studentinfo

create

table studentinfo(

sid int(3

)primary

key,

sname varchar(20

)not

null

,s*** varchar(6

)check

(s*** in

('男'

,'女'))

,sage int(2

)default

18,email varchar(32

)unique

);

例項:建立學生資訊表的同時指定引入major表的主鍵當做外來鍵

create

table stuinfo(

id int

primary

key,

stuname varchar(32

)not

null

,*** char(1

)check

(***=

'男'or ***=

'女')

,seat int

unique

,age int

default

18,majorid int**

references

** major(id)

);

//即在對stuinfo表新增majorid資料的時候,只能輸入major表中有的id,而且stuinfo表的id也是主鍵約束,不能重複,是唯一的,不過這裡是列約束,外來鍵不起作用,check也是不起作用的,mysql不支援

建立表時新增表級約束

先把之前的表刪了

drop table if exists stuinfo

例項:建立學生資訊 表

create

table stuinfo(

id int

,stuname varchar(32

),*** char(1

),seat int

,age int

,majorid int

,constraint pk primary

key(id)

,//id設定為外來鍵

constraint uq unique

(seat)

,//seat設定為唯一

constraint ck check

(***=

'男'or ***=

'女')

,constraint fk_stuinfo_major foreign

key(majorid)

references major(id)

//這裡的語法:constraint (約束)+ 外來鍵別名,一般為目標表名_引入的表名 +foreign key +設定為外來鍵的列(majorid)+references +引入major表的id

語句解釋:majorid 設定為外來鍵,*

*將major表裡的id引入,來限制stuinfo表裡的外來鍵majorid,外來鍵起名為fk_stuinfo_major**)

;

此時如果major表沒有資料,stuinfo表也不能插入資料,因為沒有major表的id,外來鍵的限制生效了

而major表有資料了以後,插入stuinfo表的資料的majorid 也是要在major表裡有的majorid

constraint

修改表時新增約束

例項:建立學生資訊表

create

table stuinfo(id int

,stuname varchar(32

),*** char(1

),seat int

,age int

,majorid int);

例項:修改學生資訊表新增非空約束

alter

table stuinfo modify

column stuname varchar(32

)not

null

;例項:修改學生資訊表新增預設約束

alter

table stuinfo modify

column age int

default18;

例項:修改學生資訊表新增主鍵

alter

table stuinfo modify

column id int

primary

key;

alter

table stuinfo add

primary

key(id)

;例項:修改學生資訊表新增唯一約束

alter

table stuinfo add

unique

(seat)

;alter

table stuinfo modify

column seat int

unique

;

刪除約束:

例項:刪除非空約束

alter

table stuinfo modify

column stuname varchar(32

)null

;例項:刪除預設約束

alter

table stuinfo modify

column age int

;例項:刪除唯一

alter

table stuinfo drop

index seat;

例項:刪除外來鍵

alter

table stuinfo drop

foreign

key fk_stuinfo_major;

又稱為自增長列,可以不用手動去插入資料,系統會提供預設的序列值。序列值從1開始,每次自動+1;

注意:1.標識列不一定非得要跟主鍵搭配使用,但是標識列必須設定給乙個key,這個key可以是主鍵、唯

一、外來鍵。

2.乙個表中最多只能有乙個標識列

3.標識列的型別只能是數值型,一般都是int型別

2.修改表時設定標識列:

例項:修改tab_identity表時新增標識列

drop

table

ifexists tab_identity;

create

table tab_identity(id int

,name varchar(20

));alter

table tab_identity modify

column id int

primary

keyauto_increment

;

3.修改表時刪除標識列

drop

table

ifexists tab_identity;

create

table tab_identity(id int

,name varchar(20

));alter

table tab_identity modify

column id int

;

mysql 列約束 MySQL 列級約束和表級約束

一,六大約束 not null 非空 primary key 主鍵 unique 唯一 check 檢查約束,mysql 不支援,語法不報錯但無效果 foreign key 外來鍵.限制兩表關係,通常在從表引入外來鍵約束,引入主表中某列的值,保證從表該字段的值必須 於主表關聯列的值 default預...

表級約束,也可以做列級約束

你上次和我說,可以做表級約束,也可以做列級約束,但是我怎麼做表級約束就出錯,做列級約束就可以,但是書上的例題就是表級約束。例如 create table test sno char 10 age int constraint cage default 20 就可以 但是create table te...

新增列級約束

一 建立表時新增約束 1.新增列級約束 語法 直接在欄位名和型別後面追加 約束型別即可 只支援 預設 非空 主鍵 唯一 create database students use students create table stuinfo id int primary key,stuname varc...