這篇文章主要介紹“MySQL數(shù)據(jù)庫(kù)約束條件和自增長(zhǎng)序列是什么”,在日常操作中,相信很多人在MySQL數(shù)據(jù)庫(kù)約束條件和自增長(zhǎng)序列是什么問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”MySQL數(shù)據(jù)庫(kù)約束條件和自增長(zhǎng)序列是什么”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
創(chuàng)新互聯(lián)公司專(zhuān)業(yè)為企業(yè)提供湟中網(wǎng)站建設(shè)、湟中做網(wǎng)站、湟中網(wǎng)站設(shè)計(jì)、湟中網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、湟中企業(yè)網(wǎng)站模板建站服務(wù),十載湟中做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
一、約束(constraint)
約束就是在表上強(qiáng)制執(zhí)行的一種校驗(yàn)規(guī)則,當(dāng)執(zhí)行DML操作時(shí),數(shù)據(jù)必須符合這些規(guī)則,如果不符合,將無(wú)法執(zhí)行。
約束的全稱(chēng):約束條件,也稱(chēng)之為完整性約束條件。可以保證表中數(shù)據(jù)的完整性,保證數(shù)據(jù)之間的商業(yè)邏輯。
約束條件包括:
1)非空約束 (not null),簡(jiǎn)稱(chēng)NN
2)唯一性約束(unique),簡(jiǎn)稱(chēng)UK
3)主鍵約束(primary),簡(jiǎn)稱(chēng)PK
4)外鍵約束(foreign key),簡(jiǎn)稱(chēng)FK
5)檢查約束(check),簡(jiǎn)稱(chēng)CK
非空約束用于確保字段值不為null。默認(rèn)情況下任何列都允許null值,但是業(yè)務(wù)邏輯可以會(huì)要求某些列不能去null值,因此使用非空約束。
建表時(shí)設(shè)置:
create table tName(colName1 Type not null,....);
建表后設(shè)置非空約束(ps:前提表中相應(yīng)字段不能有null值)
alter table tableName modify colName type not null;
取消非空約束
alter table tableName modify colName type null;
用于保證字段或者字段的組合不出現(xiàn)重復(fù)值,但是允許為null值
建表時(shí)設(shè)置
create table tableName(colName1 Type1 unique,........ );
建表后設(shè)置
alter table tableName modify colName Type unique;alter table tableName add constraint constraintName unique(colName);
查看表中的唯一性約束名稱(chēng)
show keys from tableName;
刪除唯一性約束
drop index uniqueName on tableName;
主鍵約束在功能上講,相當(dāng)于非空約束和唯一性約束的組合。主鍵字段可以是單字段也可以是字段組合,即在主鍵約束下的字段不允許有null值,也不允許出現(xiàn)重復(fù)值。主鍵可以用來(lái)在表中唯一的確定一行記錄。一個(gè)表中只允許建立一個(gè)主鍵,其他約束條件沒(méi)有個(gè)數(shù)限制。
主鍵選取的原則
1)主鍵應(yīng)是對(duì)系統(tǒng)無(wú)意義的數(shù)據(jù),如序號(hào)
2)永遠(yuǎn)也不要更新主鍵,讓主鍵除了用于唯一標(biāo)識(shí)一行記錄之外,再無(wú)其他用途
3)主鍵不應(yīng)包含動(dòng)態(tài)變化的數(shù)據(jù),如時(shí)間戳
4)主鍵應(yīng)自動(dòng)生成,不要人為干預(yù),以免使它帶有除了唯一標(biāo)識(shí)一行以外的意義
5)主鍵盡量建立在單列上
建表時(shí)創(chuàng)建
create table tableName(colName1 Type1 primary key,........);
建表后創(chuàng)建
alter table tableName modify colName Type primary key;
alter table tableName add constraint constraintName primary key(colName);
刪除主鍵
alter table tableName drop primary key;
外鍵約束條件定義在兩張表的字段或一張表的兩個(gè)字段上,用于保證相關(guān)兩個(gè)字段的關(guān)系。即字段A如果設(shè)置外鍵約束,那么字段A的值
必須要依賴(lài)于字段B里已經(jīng)存在的值,但是可以為null。而字段B要求是表中的主鍵約束。
字段A所在的表我們稱(chēng)之為從表,字段B所在的表稱(chēng)之為主表。如果主表中的一個(gè)值被從表依賴(lài)時(shí),此時(shí)主表的該記錄不允許被刪除。
外鍵約束會(huì)降低數(shù)據(jù)庫(kù)的性能:
如果在設(shè)置外鍵約束的表上頻繁的進(jìn)行DML操作,那么每次DML操作都會(huì)檢查主表,產(chǎn)生額外的開(kāi)銷(xiāo)。再一個(gè)就是,外鍵約束會(huì)確定主從表的先后生成順序,有時(shí)會(huì)影響業(yè)務(wù)邏輯。因此,外鍵約束要看需求而定,要慎用。
建表時(shí)設(shè)置
create table tableName(empno int primary key,ename varchar(20) not null,mgr int,constraint fk_name foreign key(mgr) references tableName(empno));-------------------mgr是字段A,empno是字段B,字段B必須有主鍵約束
建表后設(shè)置
alter table tableName1 add constraint FK_name foreign key(字段A) references tableName2(字段B);
刪除外鍵約束
alter table tableName drop foreign key fk_name
檢查約束條件用來(lái)強(qiáng)制在字段上的每個(gè)值都要滿(mǎn)足檢查約束的條件。
mysql的檢查約束注意事項(xiàng):
1) 寫(xiě)法:check(條件) 。mysql在語(yǔ)法上通過(guò),但是在約束條件上沒(méi)有效果。其他數(shù)據(jù)庫(kù)如oracle有效
2) 如果是集合性質(zhì)的條件,如 gender 必須('f','m')中的某一個(gè)值,可以使用枚舉來(lái)替代檢查約束
寫(xiě)法:enum('f','m')
建表時(shí)設(shè)置:
create table tableName(name varchar(20) not null,age int check(age >0 and age <20),---語(yǔ)法通過(guò),但是約束條件無(wú)效gender enum('f','m')---------集合性質(zhì)的寫(xiě)法,此法有效);
建表后設(shè)置:
alter table tableName add CONSTRAINT enum_age check(age>18);---其他數(shù)據(jù)庫(kù)約束條件有效,mysql無(wú)效alter table tableName modify gender enum('f','m','n');--mysql有效
序列(sequence)是一種用來(lái)生成唯一數(shù)字值的數(shù)據(jù)庫(kù)對(duì)象。序列的值通常是按遞增或遞減順序自動(dòng)生成,用于自動(dòng)產(chǎn)生表中主鍵的值,是一種高效的獲取唯一鍵值的途徑。通常為主鍵服務(wù),是一組有序的整數(shù)值,如1,2,3,4,5,.......................
mysql不支持序列機(jī)制,但是mysql的auto_increment可以達(dá)到與序列機(jī)制一樣的效果。我們稱(chēng)之為自增長(zhǎng)序列。
1)auto_increment 關(guān)鍵字,用來(lái)對(duì)有主鍵約束的字段做自增操作。2)自增長(zhǎng)序列默認(rèn)從1開(kāi)始3)自增長(zhǎng)序列的步數(shù)為14)可以設(shè)置起始數(shù)字
用法如下:
建表時(shí)設(shè)置1:create table tname(tid int primary key auto_increment,
......
);建表時(shí)設(shè)置1: create table tname(
tid int primary key auto_increment) auto_increment=100;建表后設(shè)置:alter table tableName auto_increment=100;取消自增長(zhǎng):alter table tablenName change colName colName Type unsigned not null;
作用:獲取序列最后一次的值。select last_insert_id();
到此,關(guān)于“MySQL數(shù)據(jù)庫(kù)約束條件和自增長(zhǎng)序列是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!