你知道是哪個是常見的約束中MySql不支援的嗎?
導讀 | 對於每個程式設計師來說,資料庫系統無疑是很熟悉的軟體。對於資料庫中的約束,自然也經常打交道了。 |
資料庫中的約束,顧名思義即是對插入資料庫中的資料進行了一定的限定,這樣做的目的是為了保證資料的完整性和有效性。這樣會大幅度地提升資料庫中資料的質量,節省資料庫空間和提高執行效率。
那麼,常見的資料庫約束有哪幾種呢?我們下面一起來看一下。
理論上來說,每一個資料表都應該設定一個唯一主鍵,它就像身份證一樣,唯一標識著這條資料。設定為主鍵的列不允許為空,也在全表裡面唯一。
非空約束意味著這張資料表中的某一列是必填欄位,既不允許為空。就比如我們在使用很多網上系統的時候,使用者名稱密碼都不能為空一樣。
唯一約束用來保護表中的某列資料不允許重複,它與主鍵約束類似,但是級別沒有主鍵高。一份表中,唯一約束可以建立多個,並且唯一約束的列通常可以為空。通常在一個系統裡面,類似於手機號、賬戶、郵箱等,都會被設定為唯一約束。
有些時候,我們插入資料的時候,不會把所有的資料列內容都填入,因此,有些列會被設定一個預設值,如果沒有給該列設定值,就會預設值來填充。例如我們在很多系統裡面,插入國籍的時候,預設都是中國,除非自己去改動,否則就會使用預設值。
外來鍵約束用於在兩個表之間的資料設立關聯,例如一個城市屬於那個國家,這個國家的程式碼應該與國家表的主鍵相關聯,即一個城市所屬的國家應該存在於地球上,而不是會出現某個城市位於世界上沒有的國家。
檢查約束意為對該列的數值進行檢查,例如說我們在做一個系統的時候,年齡這個欄位,其取值範圍應該不小於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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 你知道SQLite中有哪些約束嗎?SQLite
- 你知道你自己最經常使用的是哪幾個Linux命令呢?Linux
- 你知道SSL是如何工作的嗎?
- 你知道MySQL是如何處理千萬級資料的嗎?MySql
- 你知道Spring中BeanFactoryPostProcessors是如何執行的嗎?SpringBean
- SQL教程——常見的約束型別SQL型別
- 你知道的反射是這樣嗎?(二)反射
- 常見的Linux系統有哪些?你知道嗎?Linux
- 華為nova8和榮耀50最大的區別是什麼知道嗎?你i哪個
- 你知道前端是如何實現水印的嗎前端
- 你知道YouTube的架構是什麼嗎架構
- 你知道python教程哪個好嗎?Python
- 一個有趣的問題, 你知道SqlDataAdapter中的Fill是怎麼實現的嗎SQLLDAAPT
- 常見問題--表的約束initially immediate 理解
- Dart | 你知道 sync*/async* 是怎麼用的嗎?Dart
- 你真的知道Python的字串是什麼嗎?Python字串
- 你知道 Linux 核心是如何構建的嗎?Linux
- 你知道Java是如何解決可見性和有序性問題的嗎?Java
- 遊戲裡的關卡設計內藏著不少學問,常見的四種關卡你知道是什麼嗎遊戲
- 聚合支付代理是怎麼賺錢的,你知道嗎?
- 塊儲存是做什麼用的,你知道嗎?
- 你知道Ctrl+Alt+Delete是怎麼來的嗎?delete
- 你知道Python基本資料型別是哪6個麼Python資料型別
- 你知道什麼是路由器嗎?路由器
- MySQL 中的約束及相關操作MySql
- MySQL中的 UNIQUE約束和UNIQUE索引MySql索引
- Linux常見的網路排查指令,你知道幾個?Linux
- 5種常見的黑客攻擊手段,你知道幾個?黑客
- C#中泛型約束(where)是什麼?C#泛型
- 【嗅探底層】你知道Synchronized作用是同步加鎖,可你知道它在JVM中是如何實現的嗎?synchronizedJVM
- Lombok經常用,但是你知道它的原理是什麼嗎?Lombok
- jvm是如何執行i = i++ + ++i的,你知道嗎?JVM
- 你知道Thread執行緒是如何運作的嗎?thread執行緒
- 你是網路推廣的哪個層次?
- MySQL中WHERE後跟著N多個OR條件會是你期望的結果嗎?MySql
- 什麼是OA伺服器,你知道嗎?伺服器
- 你真的知道什麼是系統呼叫嗎?
- 你知道什麼是三層架構嗎?架構