總結了一些課上的筆記和**,可以執行看看
約束的作用:一種限制,用於限制表中的資料,為了保證表中的資料的準確和可靠性。
約束的分類:
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...