MySQL學(xué)習(xí)之?dāng)?shù)據(jù)庫(kù)表五大約束詳解小白篇
1.約束概念和分類(lèi)
1.1約束的概念:
對(duì)表中的數(shù)據(jù)進(jìn)行限定,保證數(shù)據(jù)的正確性,有效性,完整性
1.2約束分類(lèi)
- 1.主鍵約束(primary key):保證該字段具有非空且唯一性,一張表中只能有一個(gè)主鍵,主鍵是表中字段的唯一標(biāo)識(shí)
- 2.非空約束(not null):保證字段不能為空
- 3.唯一約束(unique):保證該字段具有唯一性但是可以為null
- 4.外鍵約束(foreign key):在一個(gè)表中存在的另一個(gè)表的主鍵或唯一鍵稱(chēng)此表的外鍵。
- 5.默認(rèn)約束(default+默認(rèn)值):用于保證該字段有默認(rèn)值(用引號(hào)引起來(lái))
2.五大約束的添加和刪除
2.1添加約束的六種方法
1.在創(chuàng)建表的時(shí)候添加非空約束(以列級(jí)約束添加)
create table + 表名(
列名 數(shù)據(jù)類(lèi)型 + 約束名
)
2.在創(chuàng)建表的時(shí)候添加非空約束(以表級(jí)約束添加)
create table 表名(
列名 數(shù)據(jù)類(lèi)型,
...
列名 數(shù)據(jù)類(lèi)型,
(constraint +別名(就是隨便為自己添加的約束起一個(gè)名字)) 約束名(對(duì)應(yīng)字段名)
)
3.修改列名的時(shí)候
alter table + 表名 + change (column) + 舊列名 新列名 新列名的類(lèi)型 + 約束
4.修改列的數(shù)據(jù)類(lèi)型的時(shí)候
alter table + 表名 + modify + (column) + 列名 列類(lèi)型 約束
5.在添加新列的時(shí)候可以添加約束
alter table + 表名 + add + (column) + 新列名 + 新列名的類(lèi)型 + 約束
6.外鍵特有
alter table + 表名 + add constraint 外鍵名稱(chēng)(自己隨便為外鍵取得名字) + foreign key(外鍵字段名) references 主表名稱(chēng)(主表要關(guān)聯(lián)的字段)
2.2三種刪除約束的方式
1.修改列名的時(shí)候不加約束
alter table + 表名 + change (column) + 舊列名 新列名 新列名的類(lèi)型
2.修改列的數(shù)據(jù)類(lèi)型的時(shí)候不加約束
alter table + 表名 + modify + (column) + 列名 列類(lèi)型
3.運(yùn)用drop特定刪除約束
alter table + 表名 + drop index/foreign key/primary key + 約束的名字
注:查看表中約束的名字:
show index from + 表名
2.3五大約束分別對(duì)應(yīng)的添加刪除方式(序號(hào)對(duì)應(yīng)2.1和2.2)
1.非空約束(not null)
- 對(duì)應(yīng)的添加方式:1 3 4 5
- 對(duì)應(yīng)的刪除方式:1 2
2.唯一約束(unique)
- 對(duì)應(yīng)的添加方式:1 2 3 4 5
- 對(duì)應(yīng)的刪除方式:1 2 3(對(duì)應(yīng)第3種的index選項(xiàng))
3.默認(rèn)約束(default)
- 對(duì)應(yīng)的添加方式:1 3 4 5
- 對(duì)應(yīng)的刪除方式:1 2
4.主鍵(primary key)
- 對(duì)應(yīng)的添加方式:1 2 3 4 5
- 對(duì)應(yīng)的刪除方式:3(對(duì)應(yīng)第3種的primary key選項(xiàng)注意后邊不加約束的名字了,因?yàn)橐粋€(gè)表里只能有一個(gè)主鍵)
5.外鍵(foreign key)
- 對(duì)應(yīng)的添加方式:2 6
- 對(duì)應(yīng)的刪除方式:3(對(duì)應(yīng)第3種的foreign key選項(xiàng))
外鍵單獨(dú)拿出來(lái)講
我們先看一個(gè)員工表(字段分別是員工編號(hào),姓名,年齡,所屬部門(mén),部門(mén)所在地):
我們可以發(fā)現(xiàn)有冗余的部分,就是研發(fā)部對(duì)應(yīng)廣州,銷(xiāo)售部對(duì)應(yīng)深圳不用寫(xiě)那么多遍,其實(shí)可以把他們分成兩張表來(lái)防止冗余的部分,第一張表存儲(chǔ)員工的信息,另一張存儲(chǔ)部門(mén)信息
表1(員工表employee):
表2(部門(mén)表department):
這里兩個(gè)表的id都是主鍵
但是這里有一個(gè)問(wèn)題,就是,我們可以隨便刪除部門(mén)表的某一行,就比如id=1的那一行,一旦刪除,那么表1里的dep_id=1的員工就查不到他們的部門(mén)信息了,所以就可以用外鍵來(lái)解決這個(gè)問(wèn)題
我們可以在創(chuàng)建表的時(shí)候就指定dep_id是外鍵,關(guān)聯(lián)department的主鍵id
語(yǔ)句格式(這里雖然是第2種方法也就是以表級(jí)約束添加外鍵但是語(yǔ)法上有不同):
create table 表名(
列名 數(shù)據(jù)類(lèi)型,
...
列名 數(shù)據(jù)類(lèi)型,
(constraint + 別名(就是隨便為自己添加的約束起一個(gè)名字)) + foreign key(字段名) + references + 主表(主表對(duì)應(yīng)字段)
)
對(duì)于本例子就可以這么寫(xiě):
create table employee(
id int primary key,
sname varchar(5),
age int,
dep_id int,
constraint aaa foreign key(dep_id) references department(id)
)
加上外鍵后我們就不能刪除department表里邊的任意一行,而且,我們也不能在employee里邊添加新的員工信息的時(shí)候把dep_id填寫(xiě)成除1,2之外的任何數(shù)字
2.4對(duì)于創(chuàng)建約束的總結(jié)
在創(chuàng)建表的時(shí)候添加列級(jí)約束只支持:默認(rèn),非空,主鍵,唯一
在添加表級(jí)約束只支持:主鍵,唯一,外鍵
2.5對(duì)于主鍵和唯一的區(qū)別
主鍵至多一個(gè)唯一可以有多個(gè)
允許兩個(gè)列組成一個(gè)主鍵和一個(gè)唯一
3.自增長(zhǎng)列
3.1概念
如果某一列是數(shù)值類(lèi)型,使用 auto_increment可以來(lái)完成值的自動(dòng)增長(zhǎng)(一般都是和主鍵一起用)
3.2在創(chuàng)建表的時(shí)候添加主鍵約束,并且完成主鍵自增長(zhǎng)的例子
格式:
create table 表名(
列名 數(shù)據(jù)類(lèi)型 primary key + auto_increment
)
舉個(gè)例子:
我們創(chuàng)建一個(gè)含學(xué)號(hào)姓名的student表,并且按照學(xué)號(hào)自增長(zhǎng)
創(chuàng)建語(yǔ)句:
create table student(
id int primary key auto_increment,
sname char(4)
)
如果此時(shí)我們表里有一個(gè)數(shù)據(jù);
當(dāng)我們?cè)俅尾迦霐?shù)據(jù)的時(shí)候不給學(xué)號(hào)即
insert into student value(null,“李四”)
再次查看表的時(shí)候自動(dòng)給我們按自增長(zhǎng)補(bǔ)了學(xué)號(hào):
3.3自增長(zhǎng)的添加和刪除
1.添加(上述在創(chuàng)建的時(shí)候添加是一種)
alter table + 表名 + modify column + 列名 類(lèi)型 約束 + AUTO_INCREMENT
2.刪除
alter table + 表名 + modify column 列名 類(lèi)型
3.4設(shè)置自增長(zhǎng)步長(zhǎng)
自增長(zhǎng)起始值為1,步長(zhǎng)起始值為1
起始值不能更改,步長(zhǎng)可以更改
用show VARIABLES LIKE “%auto_increment%”
查看對(duì)應(yīng)的步常代表的名字然后用set 步長(zhǎng)代表名字=要設(shè)置的步長(zhǎng)
以上就是MySQL學(xué)習(xí)之?dāng)?shù)據(jù)庫(kù)表五大約束詳解小白篇的詳細(xì)內(nèi)容,更多關(guān)于MySQl五大約束的資料請(qǐng)關(guān)注本站其它相關(guān)文章!
版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。