更新時(shí)間:2021-01-25 17:09:35 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1042次
MySQL可以對(duì)插入的數(shù)據(jù)進(jìn)行特定得驗(yàn)證,只有滿(mǎn)足條件才可以插入到數(shù)據(jù)表中,否則認(rèn)為是非法插入;在學(xué)習(xí)MySQL數(shù)據(jù)庫(kù)的過(guò)程中,我們接觸到了主鍵約束、外鍵約束,唯一約束和默認(rèn)約束等等對(duì)MySQL數(shù)據(jù)庫(kù)數(shù)據(jù)的限定的約束,事實(shí)上,MySQL中的約束遠(yuǎn)不止于此,本文我們就來(lái)講述常見(jiàn)的7種MySQL列約束。
1. 主鍵
- 能唯一標(biāo)識(shí)記錄的字段,可以作為主鍵。
- 一個(gè)表只能有一個(gè)主鍵。
- 主鍵具有唯一性。
- 聲明字段時(shí),用 primary key 標(biāo)識(shí)。
也可以在字段列表之后聲明
例:create table tab ( id int, stu varchar(10), primary key (id));
- 主鍵字段的值不能為null。
- 主鍵可以由多個(gè)字段共同組成。此時(shí)需要在字段列表后聲明的方法。
例:create table tab ( id int, stu varchar(10), age int, primary key (stu, age));
2. unique 唯一索引(唯一約束)
使得某字段的值也不能重復(fù)。
3. null 約束
null不是數(shù)據(jù)類(lèi)型,是列的一個(gè)屬性。
表示當(dāng)前列是否可以為null,表示什么都沒(méi)有。
null, 允許為空。默認(rèn)。
not null, 不允許為空。
insert into tab values (null, 'val');
-- 此時(shí)表示將第一個(gè)字段的值設(shè)為null, 取決于該字段是否允許為null
4. default 默認(rèn)值屬性
當(dāng)前字段的默認(rèn)值。
insert into tab values (default, 'val'); -- 此時(shí)表示強(qiáng)制使用默認(rèn)值。
create table tab ( add_time timestamp default current_timestamp );
-- 表示將當(dāng)前時(shí)間的時(shí)間戳設(shè)為默認(rèn)值。
current_date, current_time
5. auto_increment 自動(dòng)增長(zhǎng)約束
自動(dòng)增長(zhǎng)必須為索引(主鍵或unique)
只能存在一個(gè)字段為自動(dòng)增長(zhǎng)。
默認(rèn)為1開(kāi)始自動(dòng)增長(zhǎng)。可以通過(guò)表屬性 auto_increment = x進(jìn)行設(shè)置,或 alter table tbl auto_increment = x;
6. comment 注釋
例:create table tab ( id int ) comment '注釋內(nèi)容';
7. foreign key 外鍵約束
用于限制主表與從表數(shù)據(jù)完整性。
alter table t1 add constraint `t1_t2_fk` foreign key (t1_id) references t2(id);
-- 將表t1的t1_id外鍵關(guān)聯(lián)到表t2的id字段。
-- 每個(gè)外鍵都有一個(gè)名字,可以通過(guò) constraint 指定
存在外鍵的表,稱(chēng)之為從表(子表),外鍵指向的表,稱(chēng)之為主表(父表)。
作用:保持?jǐn)?shù)據(jù)一致性,完整性,主要目的是控制存儲(chǔ)在外鍵表(從表)中的數(shù)據(jù)。
MySQL中,可以對(duì)InnoDB引擎使用外鍵約束:
語(yǔ)法:
foreign key (外鍵字段) references 主表名 (關(guān)聯(lián)字段) [主表記錄刪除時(shí)的動(dòng)作] [主表記錄更新時(shí)的動(dòng)作]
此時(shí)需要檢測(cè)一個(gè)從表的外鍵需要約束為主表的已存在的值。外鍵在沒(méi)有關(guān)聯(lián)的情況下,可以設(shè)置為null.前提是該外鍵列,沒(méi)有not null。
可以不指定主表記錄更改或更新時(shí)的動(dòng)作,那么此時(shí)主表的操作被拒絕。
如果指定了 on update 或 on delete:在刪除或更新時(shí),有如下幾個(gè)操作可以選擇:
1. cascade,級(jí)聯(lián)操作。主表數(shù)據(jù)被更新(主鍵值更新),從表也被更新(外鍵值更新)。主表記錄被刪除,從表相關(guān)記錄也被刪除。
2. set null,設(shè)置為null。主表數(shù)據(jù)被更新(主鍵值更新),從表的外鍵被設(shè)置為null。主表記錄被刪除,從表相關(guān)記錄外鍵被設(shè)置成null。但注意,要求該外鍵列,沒(méi)有not null屬性約束。
3. restrict,拒絕父表刪除和更新。
注意,外鍵只被InnoDB存儲(chǔ)引擎所支持。其他引擎是不支持的。
MySQL列約束也叫做列屬性,即在MySQL數(shù)據(jù)庫(kù)中某列上的數(shù)據(jù)往往必須符合某種規(guī)范,如編號(hào)不能重復(fù)、年齡必須在一定范圍、密碼有長(zhǎng)度限制、員工所在部門(mén)必須真的存在。諸如此類(lèi)的還有自增列,只能用于整數(shù)列,且必須是主鍵列。想要深入了解的小伙伴,趕快行動(dòng),觀看本站的MySQL教程吧!
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743