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等耗時較多的操做,這樣就能夠避免這些耗時的操做,從而快速獲得結果。
相關文章
相關標籤/搜索