MySQL學(xué)習(xí)之?dāng)?shù)據(jù)庫表五大約束詳解小白篇
1.約束概念和分類
1.1約束的概念:
對表中的數(shù)據(jù)進(jìn)行限定,保證數(shù)據(jù)的正確性,有效性,完整性
1.2約束分類
- 1.主鍵約束(primary key):保證該字段具有非空且唯一性,一張表中只能有一個主鍵,主鍵是表中字段的唯一標(biāo)識
- 2.非空約束(not null):保證字段不能為空
- 3.唯一約束(unique):保證該字段具有唯一性但是可以為null
- 4.外鍵約束(foreign key):在一個表中存在的另一個表的主鍵或唯一鍵稱此表的外鍵。
- 5.默認(rèn)約束(default+默認(rèn)值):用于保證該字段有默認(rèn)值(用引號引起來)
2.五大約束的添加和刪除
2.1添加約束的六種方法
1.在創(chuàng)建表的時候添加非空約束(以列級約束添加)
create table + 表名(
列名 數(shù)據(jù)類型 + 約束名
)
2.在創(chuàng)建表的時候添加非空約束(以表級約束添加)
create table 表名(
列名 數(shù)據(jù)類型,
...
列名 數(shù)據(jù)類型,
(constraint +別名(就是隨便為自己添加的約束起一個名字)) 約束名(對應(yīng)字段名)
)
3.修改列名的時候
alter table + 表名 + change (column) + 舊列名 新列名 新列名的類型 + 約束
4.修改列的數(shù)據(jù)類型的時候
alter table + 表名 + modify + (column) + 列名 列類型 約束
5.在添加新列的時候可以添加約束
alter table + 表名 + add + (column) + 新列名 + 新列名的類型 + 約束
6.外鍵特有
alter table + 表名 + add constraint 外鍵名稱(自己隨便為外鍵取得名字) + foreign key(外鍵字段名) references 主表名稱(主表要關(guān)聯(lián)的字段)
2.2三種刪除約束的方式
1.修改列名的時候不加約束
alter table + 表名 + change (column) + 舊列名 新列名 新列名的類型
2.修改列的數(shù)據(jù)類型的時候不加約束
alter table + 表名 + modify + (column) + 列名 列類型
3.運(yùn)用drop特定刪除約束
alter table + 表名 + drop index/foreign key/primary key + 約束的名字
注:查看表中約束的名字:
show index from + 表名
2.3五大約束分別對應(yīng)的添加刪除方式(序號對應(yīng)2.1和2.2)
1.非空約束(not null)
- 對應(yīng)的添加方式:1 3 4 5
- 對應(yīng)的刪除方式:1 2
2.唯一約束(unique)
- 對應(yīng)的添加方式:1 2 3 4 5
- 對應(yīng)的刪除方式:1 2 3(對應(yīng)第3種的index選項(xiàng))
3.默認(rèn)約束(default)
- 對應(yīng)的添加方式:1 3 4 5
- 對應(yīng)的刪除方式:1 2
4.主鍵(primary key)
- 對應(yīng)的添加方式:1 2 3 4 5
- 對應(yīng)的刪除方式:3(對應(yīng)第3種的primary key選項(xiàng)注意后邊不加約束的名字了,因?yàn)橐粋€表里只能有一個主鍵)
5.外鍵(foreign key)
- 對應(yīng)的添加方式:2 6
- 對應(yīng)的刪除方式:3(對應(yīng)第3種的foreign key選項(xiàng))
外鍵單獨(dú)拿出來講
我們先看一個員工表(字段分別是員工編號,姓名,年齡,所屬部門,部門所在地):
我們可以發(fā)現(xiàn)有冗余的部分,就是研發(fā)部對應(yīng)廣州,銷售部對應(yīng)深圳不用寫那么多遍,其實(shí)可以把他們分成兩張表來防止冗余的部分,第一張表存儲員工的信息,另一張存儲部門信息
表1(員工表employee):
表2(部門表department):
這里兩個表的id都是主鍵
但是這里有一個問題,就是,我們可以隨便刪除部門表的某一行,就比如id=1的那一行,一旦刪除,那么表1里的dep_id=1的員工就查不到他們的部門信息了,所以就可以用外鍵來解決這個問題
我們可以在創(chuàng)建表的時候就指定dep_id是外鍵,關(guān)聯(lián)department的主鍵id
語句格式(這里雖然是第2種方法也就是以表級約束添加外鍵但是語法上有不同):
create table 表名(
列名 數(shù)據(jù)類型,
...
列名 數(shù)據(jù)類型,
(constraint + 別名(就是隨便為自己添加的約束起一個名字)) + foreign key(字段名) + references + 主表(主表對應(yīng)字段)
)
對于本例子就可以這么寫:
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里邊添加新的員工信息的時候把dep_id填寫成除1,2之外的任何數(shù)字
2.4對于創(chuàng)建約束的總結(jié)
在創(chuàng)建表的時候添加列級約束只支持:默認(rèn),非空,主鍵,唯一
在添加表級約束只支持:主鍵,唯一,外鍵
2.5對于主鍵和唯一的區(qū)別
主鍵至多一個唯一可以有多個
允許兩個列組成一個主鍵和一個唯一
3.自增長列
3.1概念
如果某一列是數(shù)值類型,使用 auto_increment可以來完成值的自動增長(一般都是和主鍵一起用)
3.2在創(chuàng)建表的時候添加主鍵約束,并且完成主鍵自增長的例子
格式:
create table 表名(
列名 數(shù)據(jù)類型 primary key + auto_increment
)
舉個例子:
我們創(chuàng)建一個含學(xué)號姓名的student表,并且按照學(xué)號自增長
創(chuàng)建語句:
create table student(
id int primary key auto_increment,
sname char(4)
)
如果此時我們表里有一個數(shù)據(jù);
當(dāng)我們再次插入數(shù)據(jù)的時候不給學(xué)號即
insert into student value(null,“李四”)
再次查看表的時候自動給我們按自增長補(bǔ)了學(xué)號:
3.3自增長的添加和刪除
1.添加(上述在創(chuàng)建的時候添加是一種)
alter table + 表名 + modify column + 列名 類型 約束 + AUTO_INCREMENT
2.刪除
alter table + 表名 + modify column 列名 類型
3.4設(shè)置自增長步長
自增長起始值為1,步長起始值為1
起始值不能更改,步長可以更改
用show VARIABLES LIKE “%auto_increment%”
查看對應(yīng)的步常代表的名字然后用set 步長代表名字=要設(shè)置的步長
以上就是MySQL學(xué)習(xí)之?dāng)?shù)據(jù)庫表五大約束詳解小白篇的詳細(xì)內(nèi)容,更多關(guān)于MySQl五大約束的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Mysql select語句設(shè)置默認(rèn)值的方法
這篇文章主要介紹了Mysql select語句設(shè)置默認(rèn)值的方法,需要的朋友可以參考下2014-05-05linux下安裝mysql數(shù)據(jù)庫5.6源碼安裝,修改登錄用戶密碼
這篇文章主要介紹了linux下安裝mysql5.6版本并修改登錄用戶密碼的方法。2017-11-11mysql 松散的索引掃描(Loose index scan)
今天讀《High Performance MySQL》,發(fā)現(xiàn)一個“Loose index scan”,之前完全沒有聽說過。網(wǎng)上查了些資料,這個叫松散的索引掃描(Loose index scan)2016-05-05