你知道是哪個是常見的約束中MySql不支援的嗎?

大雄45發表於2022-09-13
導讀 對於每個程式設計師來說,資料庫系統無疑是很熟悉的軟體。對於資料庫中的約束,自然也經常打交道了。

資料庫中的約束,顧名思義即是對插入資料庫中的資料進行了一定的限定,這樣做的目的是為了保證資料的完整性和有效性。這樣會大幅度地提升資料庫中資料的質量,節省資料庫空間和提高執行效率。

你知道是哪個是常見的約束中MySql不支援的嗎?你知道是哪個是常見的約束中MySql不支援的嗎?

那麼,常見的資料庫約束有哪幾種呢?我們下面一起來看一下。

1、主鍵約束Primary Key

理論上來說,每一個資料表都應該設定一個唯一主鍵,它就像身份證一樣,唯一標識著這條資料。設定為主鍵的列不允許為空,也在全表裡面唯一。

2、非空約束Not Null

非空約束意味著這張資料表中的某一列是必填欄位,既不允許為空。就比如我們在使用很多網上系統的時候,使用者名稱密碼都不能為空一樣。

3、唯一約束Unique

唯一約束用來保護表中的某列資料不允許重複,它與主鍵約束類似,但是級別沒有主鍵高。一份表中,唯一約束可以建立多個,並且唯一約束的列通常可以為空。通常在一個系統裡面,類似於手機號、賬戶、郵箱等,都會被設定為唯一約束。

4、預設約束Default

有些時候,我們插入資料的時候,不會把所有的資料列內容都填入,因此,有些列會被設定一個預設值,如果沒有給該列設定值,就會預設值來填充。例如我們在很多系統裡面,插入國籍的時候,預設都是中國,除非自己去改動,否則就會使用預設值。

5、外來鍵約束Foreign Key

外來鍵約束用於在兩個表之間的資料設立關聯,例如一個城市屬於那個國家,這個國家的程式碼應該與國家表的主鍵相關聯,即一個城市所屬的國家應該存在於地球上,而不是會出現某個城市位於世界上沒有的國家。

6、檢查約束Check

檢查約束意為對該列的數值進行檢查,例如說我們在做一個系統的時候,年齡這個欄位,其取值範圍應該不小於0,因為世界上沒有小於0歲的人。而這個最大值也應該有一個範圍。據說世界上活得最久的人是清朝的李清雲,享年256歲,一生中娶了24位妻子,共有180位子女。雖然隨著科學的進步,人們的壽命在增長。但是如果現在出現一個年齡為500歲的人,我們都會覺得資料一定是有問題的。

而這樣的問題是經常會發生的。例如說2011年的時候,義大利農業供應管理局就在資料庫中將30多萬頭義大利奶牛的壽命從122個月提高到了999個月,導致很多奶牛在系統裡面擁有了近乎“永久”的戶口,從而用於騙取歐盟的農業補貼。

因此我們可以看到,檢查約束對於資料的完整性而言還是很有用的,雖然我們也可以將相關程式碼在業務邏輯層實現。但是多一層保護都是好的,畢竟有修改資料庫許可權的系統可能不止一個。

但是在流行的MySql資料庫裡,check約束卻是不被支援的。不同於PostgresSQL等資料庫,在MYSQL中,CHECK只是一段可呼叫但毫無意義的子句。MySQL會直接忽略。如果想實現Check約束的話,可以考慮寫一個觸發器。

除了Check約束以外,還有很多其它資料庫支援而MySql不支援的操作,例如說不支援intersect操作、datetime不支援毫秒等。

但是這並不妨礙MySql被很多企業所使用,畢竟它的優點還是很多的。

原文來自:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2914341/,如需轉載,請註明出處,否則將追究法律責任。

相關文章