MySQL系列(三) MySQL的約束
-
約束
數據完整性 constraint
- 實體完整性保證表中有一個主鍵,還能夠編寫觸發器保證數據完整性
- 域完整性保證數據每列的值知足特定條件,能夠經過一下途徑來保證: 選擇適合的數據類型,外鍵,編寫觸發器,還能夠用default 約束做爲強制域完整性的一個方面
- 參照完整性保證兩張表之間的關係
約束的建立和查找:
- 建立有兩種方式:
- 表創建時就定義約束條件
- 利用 alter table 來進行約束的更新
- 惟一索引的默認約束名與列名相同。
約束和索引的區別:
- 約束是一個邏輯上的概念,用來保證數據的完整性
- 索引是一個數據結構,既有邏輯上的概念,在數據庫中還表明物理存儲的方式
對錯誤數據的約束:
- 數據庫沒有對數據的正確性進行限制。好比對null 的插入,系統會將其轉化爲合法的值。
enum 和 set 約束:
- 只限於對離散數值的約束。若是要對域進行約束,還須要經過觸發器來實現
觸發器與約束:
- 只有具有super權限的 MySQL 數據庫用戶才能夠執行這條命令
- 最多能夠對一個表創建6個觸發器
外鍵約束:
- 外鍵用來保證參照完整性。通常來講,被引用的表爲父表,引用的表成爲子表
- 可定義的子表操做有:
- cascade, 表示當父表發生delete 和 update 操做時,對相應的子表中的數據也進行操做
- set null,表示當父表發生delete 和 update,相應的子表數據被更新爲null值,且子表的值必須容許null
- no action,表示當父表發生 delete 和update,拋出錯誤,不容許此操做
- restrict, 表示沒有定義 on delete 和 on update 時,默認的外鍵設置
- 這些操做都是即時檢查,有些數據庫支持延時檢查。
- 對於參照完整性約束,外鍵能起到很好的做用。可是對於數據庫的導入操做時,外鍵每每致使在外鍵約束的檢查上花費大量時間,由於是即時檢查,因此對每一行都要進行外鍵檢查
視圖 view:
- 是一個能夠當表使用的虛表,沒有實際的物理存儲。
- 視圖的做用: 主要用來看成一個抽象裝置,特別是對有些應用程序,不須要獲取基表,只須要按照視圖定義來完成數據或更新數據。視圖能夠在一個程度上起到一個安全層的做用。
物化視圖:
- oracle 支持物化視圖,其是根據幾表實際存在的實表,即物化視圖的數據存儲在非易失性的存儲設備上。
- 物化視圖用於預先計算並保存多表的鏈接 join, 和彙集 group by等耗時較多的操做,這樣就能夠避免這些耗時的操做,從而快速獲得結果。
歡迎關注本站公眾號,獲取更多信息