新聞中心
數(shù)據(jù)庫(kù)中的約束,顧名思義即是對(duì)插入數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行了一定的限定,這樣做的目的是為了保證數(shù)據(jù)的完整性和有效性。這樣會(huì)大幅度地提升數(shù)據(jù)庫(kù)中數(shù)據(jù)的質(zhì)量,節(jié)省數(shù)據(jù)庫(kù)空間和提高運(yùn)行效率。

公司專(zhuān)注于為企業(yè)提供網(wǎng)站制作、做網(wǎng)站、微信公眾號(hào)開(kāi)發(fā)、購(gòu)物商城網(wǎng)站建設(shè),微信小程序開(kāi)發(fā),軟件按需開(kāi)發(fā)網(wǎng)站等一站式互聯(lián)網(wǎng)企業(yè)服務(wù)。憑借多年豐富的經(jīng)驗(yàn),我們會(huì)仔細(xì)了解各客戶(hù)的需求而做出多方面的分析、設(shè)計(jì)、整合,為客戶(hù)設(shè)計(jì)出具風(fēng)格及創(chuàng)意性的商業(yè)解決方案,成都創(chuàng)新互聯(lián)更提供一系列網(wǎng)站制作和網(wǎng)站推廣的服務(wù)。
那么,常見(jiàn)的數(shù)據(jù)庫(kù)約束有哪幾種呢?我們下面一起來(lái)看一下。
1、主鍵約束Primary Key
理論上來(lái)說(shuō),每一個(gè)數(shù)據(jù)表都應(yīng)該設(shè)置一個(gè)唯一主鍵,它就像身份證一樣,唯一標(biāo)識(shí)著這條數(shù)據(jù)。設(shè)置為主鍵的列不允許為空,也在全表里面唯一。
2、非空約束Not Null
非空約束意味著這張數(shù)據(jù)表中的某一列是必填字段,既不允許為空。就比如我們?cè)谑褂煤芏嗑W(wǎng)上系統(tǒng)的時(shí)候,用戶(hù)名密碼都不能為空一樣。
3、唯一約束Unique
唯一約束用來(lái)保護(hù)表中的某列數(shù)據(jù)不允許重復(fù),它與主鍵約束類(lèi)似,但是級(jí)別沒(méi)有主鍵高。一份表中,唯一約束可以創(chuàng)建多個(gè),并且唯一約束的列通??梢詾榭铡MǔT谝粋€(gè)系統(tǒng)里面,類(lèi)似于手機(jī)號(hào)、賬戶(hù)、郵箱等,都會(huì)被設(shè)置為唯一約束。
4、默認(rèn)約束Default
有些時(shí)候,我們插入數(shù)據(jù)的時(shí)候,不會(huì)把所有的數(shù)據(jù)列內(nèi)容都填入,因此,有些列會(huì)被設(shè)置一個(gè)默認(rèn)值,如果沒(méi)有給該列設(shè)置值,就會(huì)默認(rèn)值來(lái)填充。例如我們?cè)诤芏嘞到y(tǒng)里面,插入國(guó)籍的時(shí)候,默認(rèn)都是中國(guó),除非自己去改動(dòng),否則就會(huì)使用默認(rèn)值。
5、外鍵約束Foreign Key
外鍵約束用于在兩個(gè)表之間的數(shù)據(jù)設(shè)立關(guān)聯(lián),例如一個(gè)城市屬于那個(gè)國(guó)家,這個(gè)國(guó)家的代碼應(yīng)該與國(guó)家表的主鍵相關(guān)聯(lián),即一個(gè)城市所屬的國(guó)家應(yīng)該存在于地球上,而不是會(huì)出現(xiàn)某個(gè)城市位于世界上沒(méi)有的國(guó)家。
6、檢查約束Check
檢查約束意為對(duì)該列的數(shù)值進(jìn)行檢查,例如說(shuō)我們?cè)谧鲆粋€(gè)系統(tǒng)的時(shí)候,年齡這個(gè)字段,其取值范圍應(yīng)該不小于0,因?yàn)槭澜缟蠜](méi)有小于0歲的人。而這個(gè)最大值也應(yīng)該有一個(gè)范圍。據(jù)說(shuō)世界上活得最久的人是清朝的李清云,享年256歲,一生中娶了24位妻子,共有180位子女。雖然隨著科學(xué)的進(jìn)步,人們的壽命在增長(zhǎng)。但是如果現(xiàn)在出現(xiàn)一個(gè)年齡為500歲的人,我們都會(huì)覺(jué)得數(shù)據(jù)一定是有問(wèn)題的。
而這樣的問(wèn)題是經(jīng)常會(huì)發(fā)生的。例如說(shuō)2011年的時(shí)候,意大利農(nóng)業(yè)供應(yīng)管理局就在數(shù)據(jù)庫(kù)中將30多萬(wàn)頭意大利奶牛的壽命從122個(gè)月提高到了999個(gè)月,導(dǎo)致很多奶牛在系統(tǒng)里面擁有了近乎“永久”的戶(hù)口,從而用于騙取歐盟的農(nóng)業(yè)補(bǔ)貼。
因此我們可以看到,檢查約束對(duì)于數(shù)據(jù)的完整性而言還是很有用的,雖然我們也可以將相關(guān)代碼在業(yè)務(wù)邏輯層實(shí)現(xiàn)。但是多一層保護(hù)都是好的,畢竟有修改數(shù)據(jù)庫(kù)權(quán)限的系統(tǒng)可能不止一個(gè)。
但是在流行的MySql數(shù)據(jù)庫(kù)里,check約束卻是不被支持的。不同于PostgresSQL等數(shù)據(jù)庫(kù),在MYSQL中,CHECK只是一段可調(diào)用但毫無(wú)意義的子句。MySQL會(huì)直接忽略。如果想實(shí)現(xiàn)Check約束的話(huà),可以考慮寫(xiě)一個(gè)觸發(fā)器。
除了Check約束以外,還有很多其它數(shù)據(jù)庫(kù)支持而MySql不支持的操作,例如說(shuō)不支持intersect操作、datetime不支持毫秒等。
但是這并不妨礙MySql被很多企業(yè)所使用,畢竟它的優(yōu)點(diǎn)還是很多的。
當(dāng)前標(biāo)題:數(shù)據(jù)庫(kù)中常見(jiàn)的六種約束,有一種MySql不支持,你知道是哪個(gè)嗎?
文章分享:http://m.5511xx.com/article/cdgdhed.html


咨詢(xún)
建站咨詢(xún)
