日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

『数据库』这篇数据库的文章真没人看--数据库完整性

發布時間:2023/12/15 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 『数据库』这篇数据库的文章真没人看--数据库完整性 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

『數據庫』 樸實無華且枯燥的數據庫教程–入門必看!(不收藏,真的吃虧了)

文章目錄

    • 實體完整性
    • 參照完整性
    • 用戶定義的完整性
    • 完整性約束命名子句
    • 域中的完整性限制
    • 觸發器
    • 激活觸發器
    • 刪除觸發器
    • 小結

什么是數據庫的完整性
? 數據的正確性和相容性
? 防止不合語義的數據進入數據庫。
? 完整性:真實地反映現實世界

數據的完整性和安全性是兩個不同概念

  • 數據的完整性
    ?防止數據庫中存在不符合語義的數據,也就是防止數據庫中存在不正確的數據
    ?防范對象:不合語義的、不正確的數據
  • 數據的安全性
    ?保護數據庫防止惡意的破壞和非法的存取
    ?防范對象:非法用戶和非法操作
  • 為維護數據庫的完整性,DBMS必須:

    • 提供定義完整性約束條件的機制
    • 提供完整性檢查的方法
    • 違約處理

    完整性約束條件定義

  • 完整性約束條件:數據模型的組成部分約束數據庫中數據的語義。
  • DBMS應提供定義數據庫完整性約束條件,并把它們作為模式的一部分存入數據庫中。
  • 完整性控制機制
    檢查用戶發出的操作請求是否違背了完整性約束條件

    違約反應
    如果發現用戶的操作請求使數據違背了完
    整性約束條件,則采取一定的動作來保證
    數據的完整性。

    實體完整性

    一、實體完整性定義

  • 關系模型的實體完整性
    ? CREATE TABLE中用PRIMARY KEY定義
  • 單屬性構成的碼有兩種說明方法
    ? 定義為列級約束條件
    ? 定義為表級約束條件
  • 對多個屬性構成的碼只有一種說明方法
    ? 定義為表級約束條件
  • 【例1】
    將Student表中的Sno屬性定義為碼
    (1)在列級定義主碼

    CREATE TABLE Student (Sno CHAR(9) PRIMARY KEY, Sname CHAR(20) NOT NULL, Ssex CHAR(2) , Sage SMALLINT, Sdept CHAR(20));

    (2)在表級定義主碼

    CREATE TABLE Student (Sno CHAR(9), Sname CHAR(20) NOT NULL, Ssex CHAR(2) , Sage SMALLINT, Sdept CHAR(20), PRIMARY KEY (Sno) );

    二、實體完整性檢查和違約處理

  • 插入或對主碼列進行更新操作時,RDBMS按照實體完整性規則自動進行檢查。包括:
    ? 檢查主碼值是否唯一,如果不唯一則拒絕插入或修改。檢查記錄中主碼值是否唯一的一種方法是進行全表掃描。
    ? 檢查主碼的各個屬性是否為空,只要有一個為空就拒絕插入或修改。
  • 參照完整性

    一、參照完整性定義

  • 關系模型的參照完整性定義
    ? 在CREATE TABLE中用FOREIGN KEY短語定義哪些列為外碼
    ? 用REFERENCES短語指明這些外碼參照哪些表的主碼
  • 【例2】
    例如,關系SC中一個元組表示一個學生選修的某門課程的成績,
    (Sno,Cno)是主碼。Sno,Cno分別參照引用Student表的主
    碼和Course表的主碼
    定義SC中的參照完整性

    CREATE TABLE SC (Sno CHAR(9) NOT NULL, Cno CHAR(4) NOT NULL, Grade SMALLINT, PRIMARY KEY (Sno, Cno)/*在表級定義實體完 整性*/ FOREIGN KEY (Sno) REFERENCES Student(Sno)/*在表級定義參照完整性*/ FOREIGN KEY (Cno) REFERENCES Course(Cno) /*在表級定義參照完整性*/ );

    二、參照完整性檢查和違約處理

    1. 參照完整性違約處理
    ? 拒絕(NO ACTION)執行:默認策略
    ? 級聯(CASCADE)操作
    ? 設置為空值(SET-NULL)
    對于參照完整性,除了應該定義外碼,還應定義外碼列是否允許空值

    【例3】
    顯式說明參照完整性的違約處理示例

    CREATE TABLE SC (Sno CHAR(9) NOT NULL, Cno CHAR(4) NOT NULL, Grade SMALLINT, PRIMARY KEY(Sno,Cno), FOREIGN KEY (Sno) REFERENCES Student(Sno) ON DELETE CASCADE /*級聯刪除SC表中相應的元組*/ ON UPDATE CASCADE, /*級聯更新SC表中相應的元組*/ FOREIGN KEY (Cno) REFERENCES Course(Cno) ON DELETE NO ACTION /*當刪除course 表中的元組造成了與SC表不一致時拒絕刪除*/ ON UPDATE CASCADE /*當更新course表中的cno時,級聯更新SC表中相應的元組*/ )

    用戶定義的完整性

  • 用戶定義的完整性就是針對某一具體應用的數據必須滿足的語義要求
  • RDBMS提供,而不必由應用程序承擔
  • 一、屬性上的約束條件的定義

    CREATE TABLE時定義
    ? 列值非空(NOT NULL)
    ? 列值唯一(UNIQUE)
    ? 檢查列值是否滿足一個布爾表達式(CHECK)

    二、屬性上的約束條件檢查和違約處理

    • 插入元組或修改屬性的值時,RDBMS檢查屬性上的約束條件是否被滿足
    • 如果不滿足則操作被拒絕執行

    三、元組上的約束條件的定義

    • 在CREATE TABLE時可以用CHECK短語定義元組上的約束條件,即元組級的限制
    • 同屬性值限制相比,元組級的限制可以設置不同屬性之間的取值的相互約束條件

    四、元組上的約束條件檢查和違約處理

  • 插入元組或修改屬性的值時,RDBMS檢查元組上的約束條件是否被滿足
  • 如果不滿足則操作被拒絕執行
  • 完整性約束命名子句

  • CONSTRAINT 約束
  • CONSTRAINT <完整性約束條件名> [PRIMARY KEY短語 |FOREIGN KEY短語 |CHECK短語]
  • 修改表中的完整性限制
    使用ALTER TABLE語句修改表中的完整性限制
  • 域中的完整性限制

    SQL支持域的概念,并可以用CREATE DOMAIN語句建立一個域以及該域應該滿足的完整性約束條件。

    觸發器

  • 觸發器(Trigger)是用戶定義在關系表上的一類由事件驅動的特殊過程
    ? 由服務器自動激活
    ? 可以進行更為復雜的檢查和操作,具有更精細和更強大的數據控制能力
  • 一、定義觸發器
    1. CREATE TRIGGER語法格式

    CREATE TRIGGER <觸發器名> {BEFORE | AFTER} <觸發事件> ON <表名> FOR EACH {ROW | STATEMENT} [WHEN <觸發條件><觸發動作體>

    2.定義觸發器的語法說明
    1)創建者:表的擁有者
    2)觸發器名
    3)表名:觸發器的目標表
    4)觸發事件:INSERT、DELETE、UPDATE
    5)觸發器類型:
    ?行級觸發器(FOR EACH ROW)
    ?語句級觸發器(FOR EACH STATEMENT)
    6)觸發條件
    ? 觸發條件為真
    ? 省略WHEN觸發條件
    7) 觸發動作體
    ? 觸發動作體可以是一個匿名PL/SQL過程塊
    ? 也可以是對已創建存儲過程的調用

    【例4】
    定義一個BEFORE行級觸發器,為教師表Teacher定義完整性規則“教授的工資不得低于4000元,如果低于4000元,自動改為4000元”。

    CREATE TRIGGER Insert_Or_Update_Sal BEFORE INSERT OR UPDATE ON Teacher /*觸發事件是插入或更新操作*/ FOR EACH ROW /*行級觸發器*/ AS BEGIN /*定義觸發動作 體,是PL/SQL過程塊*/ IF (new.Job='教授') AND (new.Sal < 4000) THEN new.Sal :=4000; END IF; END;

    激活觸發器

  • 觸發器的執行,是由觸發事件激活的,并由數據庫服務器自動執行
  • 一個數據表上可能定義了多個觸發器
    同一個表上的多個觸發器激活時遵循如下的執行順序:
    (1) 執行該表上的BEFORE觸發器;
    (2) 激活觸發器的SQL語句;
    (3) 執行該表上的AFTER觸發器
  • 刪除觸發器

  • 刪除觸發器的SQL語法:
  • DROP TRIGGER <觸發器名> ON <表名>;
  • 觸發器必須是一個已經創建的觸發器,并且只能由具有相應權限的用戶刪除
  • 小結

  • 數據庫的完整性是為了保證數據庫中存儲的數據是正確的
  • RDBMS完整性實現的機制
    ? 完整性約束定義機制
    ? 完整性檢查機制
    ? 違背完整性約束條件時RDBMS應采取的動作
  • 寫在最后:
    本數據庫專欄是由愛吃老談酸菜的DV一同完成的,博客鏈接在主頁友鏈,是我的好哥們?
    Name:風骨散人,目前是一名雙非在校大學生,預計考研,熱愛編程,熱愛技術,喜歡分享,知識無界,希望我的分享可以幫到你!名字的含義:我想有一天我能有能力隨心所欲不逾矩,不總是向生活低頭,有能力讓家人擁有富足的生活而不是為了生計而到處奔波。“世人慌慌張張,不過是圖碎銀幾兩。偏偏這碎銀幾兩,能解世間惆悵,可讓父母安康,可護幼子成長 …”
    文章主要內容:
    Python,C++,C語言,JAVA,C#等語言的教程
    ACM題解、模板、算法等,主要是數據結構,數學和圖論
    設計模式,數據庫,計算機網絡,操作系統,計算機組成原理
    Python爬蟲、深度學習、機器學習
    計算機系408考研的所有專業課內容
    目前還在更新中,先關注不迷路。微信公眾號,cnblogs(博客園),CSDN同名“風骨散人”

    如果有什么想看的,可以私信我,如果在能力范圍內,我會發布相應的博文!
    感謝大家的閱讀!😘你的點贊、收藏、關注是對我最大的鼓勵!

    總結

    以上是生活随笔為你收集整理的『数据库』这篇数据库的文章真没人看--数据库完整性的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。