中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

一元云購(gòu)網(wǎng)站開發(fā)國(guó)家職業(yè)技能培訓(xùn)官網(wǎng)

一元云購(gòu)網(wǎng)站開發(fā),國(guó)家職業(yè)技能培訓(xùn)官網(wǎng),網(wǎng)站關(guān)鍵詞優(yōu)化有用嗎,南陽(yáng)企業(yè)網(wǎng)站推廣數(shù)據(jù)庫(kù)系統(tǒng)筆記 計(jì)科210X 甘晴void 202108010XXX 教材&#xff1a;《數(shù)據(jù)庫(kù)系統(tǒng)概論》第6版 &#xff08;圖片來(lái)源于網(wǎng)絡(luò)&#xff0c;侵刪&#xff09; 文章目錄 數(shù)據(jù)庫(kù)系統(tǒng)<br>筆記第一篇 基礎(chǔ)篇1 緒論1.1數(shù)據(jù)庫(kù)系統(tǒng)概述1.2數(shù)據(jù)模型1.3數(shù)據(jù)庫(kù)系統(tǒng)的結(jié)構(gòu)(三級(jí)模式結(jié)構(gòu)…

數(shù)據(jù)庫(kù)系統(tǒng)
筆記

計(jì)科210X 甘晴void 202108010XXX

教材:《數(shù)據(jù)庫(kù)系統(tǒng)概論》第6版
在這里插入圖片描述
(圖片來(lái)源于網(wǎng)絡(luò),侵刪)

文章目錄

  • 數(shù)據(jù)庫(kù)系統(tǒng)<br>筆記
  • 第一篇 基礎(chǔ)篇
    • 1 緒論
      • 1.1數(shù)據(jù)庫(kù)系統(tǒng)概述
      • 1.2數(shù)據(jù)模型
      • 1.3數(shù)據(jù)庫(kù)系統(tǒng)的結(jié)構(gòu)(三級(jí)模式結(jié)構(gòu))
      • 1.4數(shù)據(jù)庫(kù)系統(tǒng)的組成
      • 1.5總結(jié)
    • 2 關(guān)系數(shù)據(jù)庫(kù)
      • 2.1關(guān)系
        • 2.1.1關(guān)系
        • 2.1.2關(guān)系模式
      • 2.2關(guān)系操作
        • 2.2.1基本的關(guān)系操作
        • 2.2.2關(guān)系數(shù)據(jù)語(yǔ)言的分類
      • 2.3關(guān)系完整性
      • ★2.4關(guān)系代數(shù)
        • 2.4.1傳統(tǒng)的集合運(yùn)算
        • 2.4.2專門的關(guān)系運(yùn)算
    • 3 關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言 SQL
      • 3.1 SQL概述
      • 3.2數(shù)據(jù)定義
      • ★3.3數(shù)據(jù)查詢
      • 3.4數(shù)據(jù)更新
      • 3.5空值的處理
      • 3.6視圖
    • 4 數(shù)據(jù)庫(kù)安全性
      • 自主存取控制
      • 強(qiáng)制存取控制
      • 視圖機(jī)制
      • 審計(jì)
      • 數(shù)據(jù)加密(略)
      • 其他安全性保護(hù)
    • 5 數(shù)據(jù)庫(kù)完整性
      • 5.2 實(shí)體完整性
      • 5.3 參照完整性
      • 5.4 用戶定義的完整性
      • 5.5 完整性約束命名子句
      • 5.7 觸發(fā)器
  • 【期中考試備考】
  • 第二篇 設(shè)計(jì)與應(yīng)用開發(fā)篇
    • ★6 關(guān)系數(shù)據(jù)理論
      • 6.2 規(guī)范化
      • ★6.3 數(shù)據(jù)依賴的公理系統(tǒng)
    • 7 數(shù)據(jù)庫(kù)設(shè)計(jì)
      • ★7.1 數(shù)據(jù)庫(kù)設(shè)計(jì)概述
      • 7.2 需求分析
      • 7.3 概念結(jié)構(gòu)設(shè)計(jì)
      • 7.4 邏輯結(jié)構(gòu)設(shè)計(jì)
      • 7.5 物理結(jié)構(gòu)設(shè)計(jì)
      • 7.6 數(shù)據(jù)庫(kù)的實(shí)施和維護(hù)
    • 【不考】8 數(shù)據(jù)庫(kù)編程
      • 8.1 擴(kuò)展SQL功能
      • 8.2 過(guò)程化SQL
      • 8.3 JDBC編程
    • 【不考】9 關(guān)系數(shù)據(jù)庫(kù)存儲(chǔ)管理
    • 10 關(guān)系查詢處理和查詢優(yōu)化
      • 10.1 關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)的查詢處理
      • 10.2 關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)的查詢優(yōu)化
      • 10.3 代數(shù)優(yōu)化
      • 10.4 物理優(yōu)化
      • ★本章重要簡(jiǎn)答題
    • 11 數(shù)據(jù)庫(kù)恢復(fù)技術(shù)
      • 11.1 事務(wù)的基本概念
      • ★11.3 故障的種類
      • 11.4 數(shù)據(jù)庫(kù)恢復(fù)的實(shí)現(xiàn)技術(shù)
      • ★11.5 恢復(fù)策略
      • ★11.6 具有檢查點(diǎn)的恢復(fù)技術(shù)
      • 11.7 數(shù)據(jù)庫(kù)鏡像(了解)
    • 12 并發(fā)控制
      • 12.1 并發(fā)控制概述
      • 12.2 事務(wù)的隔離級(jí)別
      • 12.3 封鎖
      • 12.4 封鎖協(xié)議
      • 12.5 活鎖和死鎖
      • 12.6 并發(fā)調(diào)度的可串行性
      • 12.7 兩段鎖協(xié)議
      • 12.8 封鎖的粒度
  • 【期末考試復(fù)習(xí)】

第一篇 基礎(chǔ)篇

1 緒論

1.1數(shù)據(jù)庫(kù)系統(tǒng)概述

基本概念:

  • 數(shù)據(jù):描述事物的符號(hào)記錄稱為數(shù)據(jù)。數(shù)據(jù)的含義稱為數(shù)據(jù)的語(yǔ)義,數(shù)據(jù)與其語(yǔ)義是不可分的。

  • 數(shù)據(jù)庫(kù)(DB):長(zhǎng)期存儲(chǔ)在計(jì)算機(jī)內(nèi)、有組織的、可共享的大量數(shù)據(jù)的集合。數(shù)據(jù)庫(kù)中的數(shù)據(jù)按一定的數(shù)據(jù)模型組織、描述和存儲(chǔ),具有較小的冗余度較高的數(shù)據(jù)獨(dú)立性和易擴(kuò)展性并可為各種用戶共享。

  • 數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS):數(shù)據(jù)庫(kù)管理軟件,計(jì)算機(jī)的基礎(chǔ)軟件

    數(shù)據(jù)定義功能
    數(shù)據(jù)組織、存儲(chǔ)和管理
    數(shù)據(jù)操縱功能
    數(shù)據(jù)庫(kù)的事務(wù)管理和運(yùn)行管理
    數(shù)據(jù)庫(kù)的建立和維護(hù)功能
    其他功能

  • 數(shù)據(jù)庫(kù)系統(tǒng)(DBS):由DB,DBMS及其應(yīng)用開發(fā)工具,應(yīng)用系統(tǒng)和DBA組成的存儲(chǔ)、管理、處理和維護(hù)數(shù)據(jù)的系統(tǒng)

  • DBA數(shù)據(jù)庫(kù)管理員

數(shù)據(jù)庫(kù)管理技術(shù)的產(chǎn)生和發(fā)展:

人工管理階段 -> 文件系統(tǒng)階段 -> 數(shù)據(jù)庫(kù)系統(tǒng)階段

數(shù)據(jù)庫(kù)系統(tǒng)階段的4個(gè)優(yōu)點(diǎn)

  • 整體數(shù)據(jù)的結(jié)構(gòu)化(與文件系統(tǒng)的本質(zhì)區(qū)別)
  • 數(shù)據(jù)的共享性強(qiáng)、冗余度低且易于擴(kuò)充
  • 數(shù)據(jù)的獨(dú)立性強(qiáng)(物理獨(dú)立性,邏輯獨(dú)立性)
  • 數(shù)據(jù)由數(shù)據(jù)庫(kù)管理系統(tǒng)統(tǒng)一管理和控制

另外還需要提供的功能:

  • 數(shù)據(jù)的安全性保護(hù):防止不合法使用造成的數(shù)據(jù)泄密和破壞。
  • 數(shù)據(jù)的完整性檢查:控制數(shù)據(jù)的正確性,有效性和相容性。
  • 并發(fā)控制
  • 數(shù)據(jù)庫(kù)恢復(fù)

1.2數(shù)據(jù)模型

數(shù)據(jù)模型:數(shù)據(jù)庫(kù)系統(tǒng)的核心和基礎(chǔ)。

數(shù)據(jù)建模:把現(xiàn)實(shí)世界中的具體事物抽象、組織為某一數(shù)據(jù)庫(kù)管理系統(tǒng)支持的數(shù)據(jù)模型。

概念模型(現(xiàn)實(shí)世界抽象為信息世界) -> 數(shù)據(jù)模型(信息世界轉(zhuǎn)換為機(jī)器世界)

概念模型:

  • 實(shí)體:客觀存在并可相互區(qū)別的實(shí)物稱為實(shí)體。
  • 屬性:實(shí)體所具有的某一特性。
  • 碼(key):唯一標(biāo)識(shí)實(shí)體的屬性集稱為碼。
  • 實(shí)體型:用實(shí)體名和屬性名集合來(lái)抽象和刻畫同類實(shí)體。例如:學(xué)生(學(xué)號(hào),姓名,性別,院系)。
  • 實(shí)體集:同一類型實(shí)體的集合稱為實(shí)體集。
  • 聯(lián)系:實(shí)體之間的聯(lián)系通常是指不同實(shí)體集之間的聯(lián)系。有一對(duì)一,一對(duì)多和多對(duì)多等多種類型。

概念模型的表示方法:實(shí)體-聯(lián)系模型(E-R模型)

數(shù)據(jù)模型三要素:

  • 數(shù)據(jù)結(jié)構(gòu):描述數(shù)據(jù)庫(kù)的組成對(duì)象以及對(duì)象之間的聯(lián)系。
  • 數(shù)據(jù)操作:對(duì)數(shù)據(jù)庫(kù)中各種對(duì)象的實(shí)例允許執(zhí)行的操作的集合,包括操作及有關(guān)的操作規(guī)則。
  • 完整性約束:一組完整性規(guī)則。

層次模型:

  • 數(shù)據(jù)庫(kù)中滿足下面兩個(gè)條件的基本層次聯(lián)系的集合為層次模型:
    • 有且只有一個(gè)結(jié)點(diǎn)沒有雙親結(jié)點(diǎn),稱為根結(jié)點(diǎn)。
    • 根以外的其他結(jié)點(diǎn)只有一個(gè)雙親結(jié)點(diǎn)。
  • 【注意:層次模型是一種一對(duì)多的聯(lián)系】
  • 數(shù)據(jù)操縱主要為查詢,插入,刪除,更新。操作要滿足層次模型的完整性約束條件。
  • 層次模型的優(yōu)點(diǎn):
    • 數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)單清晰。
    • 查詢效率高(因?yàn)槁?lián)系用有向邊表示)。
    • 提供了良好的完整性支持。
  • 【未標(biāo)著重】層次模型的缺點(diǎn):
    • 現(xiàn)實(shí)中很多聯(lián)系是非層次性的。
    • 一個(gè)結(jié)點(diǎn)有多個(gè)雙親結(jié)點(diǎn),就只能引入冗余數(shù)據(jù),應(yīng)用程序編寫復(fù)雜。
    • 查詢子女結(jié)點(diǎn)必須通過(guò)雙親結(jié)點(diǎn)。
    • 結(jié)構(gòu)嚴(yán)密,層次命令趨于程序化。

網(wǎng)狀模型:

  • 數(shù)據(jù)庫(kù)中滿足下面兩個(gè)條件的基本層次聯(lián)系的集合為網(wǎng)狀模型:
    • 允許一個(gè)以上的結(jié)點(diǎn)無(wú)雙親。
    • 一個(gè)結(jié)點(diǎn)可以有多于一個(gè)的雙親。
  • 【注意:層次模型是一種多對(duì)多的聯(lián)系】
  • 具體的網(wǎng)狀數(shù)據(jù)庫(kù)系統(tǒng)對(duì)數(shù)據(jù)操縱都加了一些限制,提供了一定的完整性約束。
  • 網(wǎng)狀模型的優(yōu)點(diǎn):
    • 能夠更為直接的描述現(xiàn)實(shí)世界。
    • 具有良好的性能,存儲(chǔ)效率較高
  • 【未標(biāo)著重】網(wǎng)狀模型的缺點(diǎn):
    • 結(jié)構(gòu)比較復(fù)雜,不利于最終用戶掌握。
    • DDL,DML復(fù)雜,并且要嵌入一種高級(jí)語(yǔ)言中,不容易掌握和使用。
    • 記錄之間的聯(lián)系通過(guò)存取路徑實(shí)現(xiàn),訪問數(shù)據(jù)時(shí)必須選擇適當(dāng)?shù)拇嫒÷窂?#xff0c;用戶必須了解系統(tǒng)結(jié)構(gòu)的細(xì)節(jié)。

關(guān)系模型:

  • 關(guān)系模型要求關(guān)系必須是規(guī)范化的,關(guān)系的每一個(gè)分量必須是一個(gè)不可分的數(shù)據(jù)項(xiàng)。
  • 關(guān)系模型的優(yōu)點(diǎn):
    • 建立在嚴(yán)格的數(shù)學(xué)概念基礎(chǔ)上。
    • 概念單一
    • 關(guān)系模型存取路徑對(duì)用戶隱蔽:有更高的數(shù)據(jù)獨(dú)立性,更好的安全保密性。(★因此查詢需優(yōu)化)

1.3數(shù)據(jù)庫(kù)系統(tǒng)的結(jié)構(gòu)(三級(jí)模式結(jié)構(gòu))

  • 模式也稱邏輯模式,是數(shù)據(jù)庫(kù)中全體數(shù)據(jù)的邏輯結(jié)構(gòu)和特征的描述。數(shù)據(jù)庫(kù)管理系統(tǒng)提供模式數(shù)據(jù)定義語(yǔ)言(DDL)來(lái)嚴(yán)格定義模式。
  • 模式反映的是數(shù)據(jù)結(jié)構(gòu)及其聯(lián)系,而實(shí)例反映的是數(shù)據(jù)庫(kù)某一時(shí)刻的狀態(tài)。
  • 三級(jí)模式結(jié)構(gòu):
    • 模式:是所有用戶的公共數(shù)據(jù)視圖。
    • 外模式:數(shù)據(jù)庫(kù)用戶能夠看見和使用的局部數(shù)據(jù)的邏輯結(jié)構(gòu)和特征的描述,是數(shù)據(jù)庫(kù)用戶的數(shù)據(jù)視圖,是與某一應(yīng)用有關(guān)的數(shù)據(jù)的邏輯表示。
    • 內(nèi)模式:數(shù)據(jù)物理結(jié)構(gòu)和存儲(chǔ)方式的描述,是數(shù)據(jù)在數(shù)據(jù)庫(kù)內(nèi)部的組織方式。
  • 為了實(shí)現(xiàn)以上三個(gè)抽象層次的聯(lián)系和轉(zhuǎn)換,數(shù)據(jù)庫(kù)管理系統(tǒng)在三級(jí)模式之間提供了兩層映像:外模式/模式映像和模式/內(nèi)模式映像。
    • 外模式/模式映像:定義了外模式與模式之間的對(duì)應(yīng)關(guān)系。
    • 模式/內(nèi)模式映像:定義了數(shù)據(jù)全局邏輯結(jié)構(gòu)和存儲(chǔ)結(jié)構(gòu)之間的關(guān)系。
  • 數(shù)據(jù)庫(kù)模式即全局邏輯結(jié)構(gòu)是數(shù)據(jù)庫(kù)的中心與關(guān)鍵,獨(dú)立于數(shù)據(jù)庫(kù)的其他層次。(設(shè)計(jì)數(shù)據(jù)庫(kù)模式結(jié)構(gòu)時(shí)應(yīng)首先確定
  • 當(dāng)模式改變時(shí),修改映像使外模式不變,這保證了數(shù)據(jù)與程序的邏輯獨(dú)立性。
  • 當(dāng)存儲(chǔ)結(jié)構(gòu)(內(nèi)模式)改變時(shí),修改映像使模式保持不變,這保證了數(shù)據(jù)與程序的物理獨(dú)立性

1.4數(shù)據(jù)庫(kù)系統(tǒng)的組成

  • 硬件平臺(tái)及數(shù)據(jù)庫(kù)
  • 軟件
  • 人員

人員包括

  • 數(shù)據(jù)庫(kù)管理員:5個(gè)職責(zé)(書P32)
  • 系統(tǒng)分析員和數(shù)據(jù)庫(kù)設(shè)計(jì)人員
  • 應(yīng)用程序員:編程
  • 最終用戶

1.5總結(jié)

4個(gè)基本概念

數(shù)據(jù)模型3要素

三級(jí)模式與兩級(jí)映射保證邏輯獨(dú)立性與物理獨(dú)立性

數(shù)據(jù)庫(kù)系統(tǒng)三級(jí)模式結(jié)構(gòu)的優(yōu)點(diǎn)

為什么具有數(shù)據(jù)和結(jié)構(gòu)的獨(dú)立性

2 關(guān)系數(shù)據(jù)庫(kù)

2.1關(guān)系

2.1.1關(guān)系

域:域

笛卡爾積:笛卡爾積(域的運(yùn)算)、元組、n元組、分量(元組中的每一個(gè)值)、基數(shù) (一個(gè)域允許的不同取值個(gè)數(shù))

關(guān)系:

  • 關(guān)系(一些域的笛卡爾積的子集即為這些域的關(guān)系,抽取有意義的子集),記作R(……)、

  • 關(guān)系的目/度n(運(yùn)算的笛卡爾積的個(gè)數(shù),即關(guān)系表的特征列個(gè)數(shù))、

  • 屬性(n目關(guān)系必有n個(gè)屬性)、

三類關(guān)系

基本關(guān)系(基本表/基表)【實(shí)際存在】有6條性質(zhì)(列同質(zhì)、不同元組碼不能相同、不同列可出自同一域、列可換順序、行可換順序、分量取原子值,即不能表中有表)

查詢表【針對(duì)查詢結(jié)果的臨時(shí)表,實(shí)際存在】

視圖表【虛表】

2.1.2關(guān)系模式

R(A1,A2,A3,)

  • 候選碼、主碼、全碼、主屬性、非主屬性(非碼屬性)

關(guān)系數(shù)據(jù)庫(kù):關(guān)系數(shù)據(jù)庫(kù)模式:關(guān)系數(shù)據(jù)庫(kù)的“型”

關(guān)系模型的存儲(chǔ)結(jié)構(gòu):RDBMS

2.2關(guān)系操作

2.2.1基本的關(guān)系操作
  • 查詢操作
  • 數(shù)據(jù)更新操作
2.2.2關(guān)系數(shù)據(jù)語(yǔ)言的分類
  • 關(guān)系代數(shù)語(yǔ)言
  • 關(guān)系演算語(yǔ)言(不要求)
  • 結(jié)構(gòu)化查詢語(yǔ)言(Structured Query Language, SQL)

關(guān)系完備性:一個(gè)關(guān)系數(shù)據(jù)語(yǔ)言能夠表示關(guān)系代數(shù)可以表示的查詢

2.3關(guān)系完整性

包括

  • 實(shí)體完整性(主屬性不取空值不得重復(fù))
  • 參照完整性(注意外碼的定義:不是參照關(guān)系的碼但是被參照關(guān)系的主碼)(外碼可以取空值或被參考關(guān)系中已經(jīng)存在的值)
  • 用戶定義的完整性(用戶可以自己定義:唯一約束、主鍵約束、自增長(zhǎng)約束、默認(rèn)值約束、檢查約束)

★2.4關(guān)系代數(shù)

2.4.1傳統(tǒng)的集合運(yùn)算

并、差、交、笛卡爾積

???#xff1a;R∩S=R-(R-S)

2.4.2專門的關(guān)系運(yùn)算

基礎(chǔ)記號(hào):

  • 關(guān)系R、t∈R(t是關(guān)系R的一個(gè)元組)、t[Ai](元組t中相應(yīng)于屬性Ai的一個(gè)分量)
  • t[A]=(t[Ai1],t[Ai2],t[Ai3],……,t[Aik])(元組t中相應(yīng)于屬性Ai的一個(gè)分量)
  • 元組的連接/串接(就是把列連起來(lái))
  • 象集(關(guān)系R(X,Z),對(duì)所有列ABCD……,以A=a,B=b(即X=x)這樣的條件篩選滿足的元組,篩選結(jié)果中非列AB的列屬性構(gòu)成的組合即為x在Z上的象集)

專門關(guān)系:

  • 選擇(σ):(根據(jù)邏輯表達(dá)式來(lái)篩選有效元組)【注意比較運(yùn)算符的不等于是<>】
  • 投影(Π):(只關(guān)注屬性列,篩選出某些屬性列并去除重復(fù)的元組)
  • 連接(?):對(duì)兩個(gè)關(guān)系R、S,從笛卡爾積中抽取滿足條件的元組(特殊的連接:θ取“=”為等值連接、自然連接)
  • 等值連接:抽取R中A列與S中B列相等的元組
  • 自然連接:進(jìn)行比較的列必需是同名的屬性列,可能造成懸浮問題
  • 懸浮元組、外連接、左外連接(只保留左邊關(guān)系的懸浮元組)、右外連接(只保留右邊關(guān)系的懸浮元組)
  • 除運(yùn)算(÷):(除集合)對(duì)于公共屬性列的投影,(被除集合)中誰(shuí)的(象集)完全包含它,誰(shuí)就需要被納入結(jié)果。
  • 【÷運(yùn)算可以用來(lái)做篩選:例如由SC表÷Course表可得到選修所有課程學(xué)生的名單】

經(jīng)過(guò)有限次復(fù)合得到的表達(dá)式稱為 關(guān)系代數(shù)表達(dá)式

如何使用五種基本運(yùn)算來(lái)表達(dá)專門關(guān)系?是一個(gè)重要的問題

在這里插入圖片描述

3 關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言 SQL

3.1 SQL概述

▲特點(diǎn)

  • 功能綜合且風(fēng)格統(tǒng)一
  • 數(shù)據(jù)操縱高度非過(guò)程化(只要提出做什么就可以)
  • 面向集合的操作方式
  • 以統(tǒng)一的語(yǔ)法結(jié)構(gòu)提供多種使用方式(獨(dú)立語(yǔ)言/嵌入式語(yǔ)言)
  • 語(yǔ)言簡(jiǎn)潔且易學(xué)易用

3.2數(shù)據(jù)定義

模式的定義與刪除

#定義模式
create schema [模式名] authorization <用戶名>;
#刪除模式
drop schema <模式名><cascade|restrict>				//級(jí)聯(lián)與限制必須二選一(CASADE會(huì)刪除所有,而若該模式內(nèi)有東西,RESTRICT會(huì)拒絕刪除)

基本表的定義、刪除與修改

#基本表的定義
create table <表名>(<列名><數(shù)據(jù)類型>[列級(jí)完整性約束]……[,<表級(jí)完整性約束>]);#一些表級(jí)完整性約束
PRIMARY KEY(Sno,Cno);
FOREIGN KEY(Sno) REFERENCES Student(Sno);列級(jí)完整性/表級(jí)完整性
#基本表的修改
ALTER TABLE <表名>[ADD [COLUMN] <新列名><數(shù)據(jù)類型>[完整性約束]][ADD <表級(jí)完整性約束>][DROP [column] <列名> [cascade|restrict]][DROP constraint <完整性約束名> [restrict|cascade]][RENAME COLUMN <列名> to <新列名>][ALTER COLUMN <列名> TYPE <數(shù)據(jù)類型>]#基本表的刪除
DROP TABLE <表名> [restrict|cascade]  #▲注意區(qū)別,默認(rèn)RESTRICT

模式與基本表

#基本表屬于某一個(gè)特定的模式,下面是創(chuàng)建特定模式下基本表的方法。#可以在指定模式下創(chuàng)建基本表
CREATE TABLE "SC-C-SC".Student(……)#可以設(shè)定模式然后創(chuàng)建基本表
SHOW SEARCH_PATH;#可以查看當(dāng)前搜索路徑
SET SEARCH_PATH TO "SC-C-SC",PUBLIC;#設(shè)置當(dāng)前模式
#之后再創(chuàng)建基本表

課本示例

#課本示例
/*建立一個(gè)學(xué)生表*/
CREATE TABLE Student(Sno CHAR(9)PRIMARY KEY,Sname CHAR(20)UNIQUE,Ssex CHAR(2),Sage SMALLINT,Sdept CHAR(20)
);
/*建立一個(gè)課程表*/
CREATE TABLE Course(Cno CHAR(4) PRIMARY KEY,Cname CHAR(40) NOT NULL,Cpno CHAR(4),Ccredit SMALLINT,/*表級(jí)完整性約束條件*/FOREIGN KEY (Cpno) REFERENCES Course(Cno)
);
/*建立學(xué)生選課表SC*/
CREATE TABLE SC(Sno CHAR(9),Cno CHAR(4),Grade SMALLINT,PRIMARY KEY(Sno,Cno),FOREIGN KEY(Sno) REFERENCES Student(Sno),FOREIGN KEY(Cno) REFERENCES Cource(Cno)
);

數(shù)據(jù)類型

P75

索引的建立與刪除

建立索引:加快查詢速度

索引是關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)的內(nèi)部實(shí)現(xiàn)技術(shù),屬于內(nèi)模式的范疇。

#索引的建立
CREATE [unique][cluster]index <索引名>
on <表名>(<列名>[<次序>],……)
#索引的修改
ALTER index <舊索引名> rename to <新索引名>
#索引的刪除
DROP index <索引名>#e.g.
CREATE UNIQUE INDEX Stusno ON Student(Sno);
CREATE UNIQUE INDEX Cousno ON Cource(Cno);
CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);

數(shù)據(jù)字典(記錄數(shù)據(jù)定義)

★3.3數(shù)據(jù)查詢

SELECT [all|distinct]<目標(biāo)列表達(dá)式>[別名][,<目標(biāo)列表達(dá)式>[別名]]……
FROM <> 
[WHERE<條件表達(dá)式>]
[GROUP BY <某個(gè)列名> [having <條件表達(dá)式>]]
[ORDER BY <某個(gè)列名> [asc|desc]]
[limit <行數(shù)1>[offset <行數(shù)2>]]

3.3.1單表查詢

#選擇表中的若干列(投影操作)
SELECT Sno FROM Student;#選擇表中的若干組(選擇操作)
SELECT DISTINCT Sno FROM Student;
#比較大小
WHERE = > < <>  != !> !<
#確定范圍
SELECT Sno FROM Student WHERE Sage BETWEEN 20 AND 21;
SELECT Sno FROM Student WHERE Sage NOT BETWEEN 20 AND 21;
#確定集合
IN | NOT IN
#字符匹配
% #任意長(zhǎng)度字符串
_ #任意單個(gè)字符
WHERE Sname LIKE '__寅';
WHERE Sname NOT LIKE '%寅';
#涉及到含有通配符,可以后跟ESCAPE'\'進(jìn)行轉(zhuǎn)義
#WHERE Sname NOT LIKE '%寅\_' ESCAPE '\';
#涉及空值的查詢
WHERE GRADE IS NULL
WHERE GRADE IS NOT NULL
#多重條件查詢
AND OR 括號(hào)#ORDER BY子句
ORDER BY grade DESC | ASC #(排序操作)允許第二關(guān)鍵字
#查詢結(jié)果排序,不影響原表#聚集函數(shù)(數(shù)理統(tǒng)計(jì))
#不能用作WHERE子句條件表達(dá)式
#只能作為SELECT子句和GROUP BY子句的HAVING短語(yǔ)
COUNT(*)
COUNT([ DISTINCT | ALL ]<列名>)
支持 sum avg max min 
#e.g.
SELECT COUNT(DISTINCT Sno) From SC;#GROUP BY子句(分組篩選)★★★
GROUP BY
SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*) > 10;#Limit子句(只選擇前多少個(gè)子句,常與ORDER BY連用)
LIMIT 10 OFFSET 5 #顯示10個(gè)忽略前5個(gè)

3.3.2連接查詢

# 自然連接查詢 復(fù)合條件連接查詢
SELECT student.sno,sname
FROM student,sc
WHERE student.sno=sc.sno ANDsc.cno='2' AND sc.grade>90;
# 自身連接,需要為表起別名
#e.g. 間接先修課(先修課的先修課)
SELECT first.cno,seconde.cpno
FROM course first,course second
WHERE first.cpno=second.cno;
# 外連接,把表中的懸浮元組保存在結(jié)果關(guān)系中
SELECT student.sno,sname,ssex,sage,sdept,cno,grade
FROM student LEFT OUTER JOIN sc ON (student.sno=sc.sno);
# 多表連接和以上類似

3.3.3嵌套查詢

查詢塊:一個(gè)select-from-where

嵌套查詢,外層查詢(父查詢),內(nèi)層查詢(子查詢)

【子查詢不能用order by】

any,all,

exist謂詞:只返回邏輯真假
存在量詞與全稱量詞

  # 不相關(guān)子查詢
SELECT name
FROM student
WHERE dept IN(SELECT dept FROM studentWHERE name='劉晨');
# 相關(guān)子查詢
SELECT sno,cno
FROM SC x
WHERE Grade >= (SELECT AVG(Grade)FROM SC yWHERE y.sno=x.sno);
# ANY(SOME)/ALL
SELECT name,age
FROM student
WHERE age<ALL(SELECT ageFROM studentWHERE dept='CS')AND dept!='CS';
# EXIST
SELECT name 
FROM student
WHERE EXISTS(SELECT *FROM SCWHERE sno=student.sno AND cno='1');

★全稱量詞的轉(zhuǎn)換

看書

★邏輯蘊(yùn)含的轉(zhuǎn)換

看書和作業(yè)例題

3.3.4集合查詢(了解即可)

# UNION
SELECT * 
FROM student
WHERE dept='CS'
UNION (UNION ALL)
SELECT *
FROM student
WHERE age<=19;# INTERSECT
SELECT * 
FROM student
WHERE dept='CS'
INTERSECT
SELECT *
FROM student
WHERE age<=19;# EXCEPT
SELECT * 
FROM student
WHERE dept='CS'
EXCEPT
SELECT *
FROM student
WHERE age<=19;

3.3.5基于派生表的查詢

SELECT Sno,Cno
FROM SC,(SELECT Sno,Avg(Grade) FROM SC GROUP BY Sno)AS Avg_SC(Avg_sno,Avg_grade)
WHERE SC.Sno = Avg_SC.Avg_sno AND SC.Grade >= Avg_SC.Avg_grade;

3.4數(shù)據(jù)更新

3.4.1插入數(shù)據(jù)

插入一個(gè)元組
INSERT INTO <表名> [(<屬性列1>,<屬性列2>,……)]		#如果與原表一致則可以省略
VALUES (<常量1>,<常量2>,……);插入子查詢結(jié)果
insert into <表名> [(<屬性列1>,<屬性列2>,……)]
子查詢;#e.g.
# 插入元組
INSERT INTO student(sno,sname,ssex,sdept,sage)				#可以不指出屬性名,但VALUE要保持順序
VALUES('201215128','陳東','男','IS',18);			  #未給出的列將自動(dòng)賦空值
# 插入子查詢結(jié)果
CREATE TABLE DEPT_AGE(SDEPT CHAR(15)AVG_AGE SMALLINT);
INSERT DEPT_AGE(SDEPT,AVG_AGE)
SELECT SDEPT,AVG(SAGE)
FROM STUDENT
GROUP BY SDEPT;

3.4.2修改數(shù)據(jù)

update <表名>
set <列名>=<表達(dá)式>,<列名>=<表達(dá)式>……
[where <條件>];# 修改一個(gè)元組的值
UPDATE student
SET sage=22
WHERE sno='201215121';
# 修改多個(gè)元組的值
UPDATE student
SET sage=sage+1;
# 帶子查詢的修改語(yǔ)句
UPDATE SC
SET grade=0
WHERE sno IN(SELECT snoFROM studentWHERE sdept='CS');

3.4.3刪除數(shù)據(jù)

delete from <表名>
[where <條件>];

3.5空值的處理

空值與另一個(gè)值的算數(shù)運(yùn)算結(jié)果為空值
空值與另一個(gè)值的比較運(yùn)算結(jié)果為UNKNOWN,不參與/影響是非判定

3.6視圖

CREATE VIEW <視圖名>[(<列名1>,<列名2>,……)]
as <子查詢>	#子查詢可以嵌套,此時(shí)稱建立在多個(gè)基本表上
[with check option];	#加上該句之后插入值時(shí)會(huì)自動(dòng)檢查是否符合子查詢的要求,若不滿足則拒絕
DROP VIEW <視圖名> [CASCADE]UPDATE SET WHERE
INSERT INTO VALUES
DELETE FROM WHERE
  • 執(zhí)行CREATE VIEW 語(yǔ)句時(shí)指示把視圖的定義存入數(shù)據(jù)字典,不執(zhí)行SELECT語(yǔ)句,只有在對(duì)視圖查詢時(shí),才按視圖的定義從基本表中將數(shù)據(jù)查出。
  • 行列子集視圖:從單個(gè)基本表導(dǎo)出,并且只是丟掉了某些行或列,但保留了主碼。(一般是可更新的)
  • 帶表達(dá)式的視圖:帶虛擬列的視圖。
  • 視圖消解:首先進(jìn)行有效性檢查,檢查查詢中涉及的視圖等是否存在。若存在,則從數(shù)據(jù)字典中取出視圖的定義,把定義中的子查詢和用戶的子查詢結(jié)合起來(lái),轉(zhuǎn)換成等價(jià)的對(duì)基本表的查詢,然后再執(zhí)行修正了的查詢

★視圖的作用:

  • 視圖能夠?qū)C(jī)密數(shù)據(jù)提供安全保護(hù)
  • 視圖對(duì)重構(gòu)數(shù)據(jù)庫(kù)提供了一定程度的邏輯獨(dú)立性
  • 視圖能夠簡(jiǎn)化用戶操作
  • 視圖使用戶能以多種角度看待同一數(shù)據(jù)

4 數(shù)據(jù)庫(kù)安全性

數(shù)據(jù)庫(kù)安全性是指保護(hù)數(shù)據(jù)庫(kù),以防不合法使用所造成的數(shù)巨泄露、篡改或破壞。

★數(shù)據(jù)庫(kù)的安全性保護(hù)數(shù)據(jù)防止惡意的破壞和非法的存取

不安全因素:

  • 非授權(quán)用戶對(duì)數(shù)據(jù)庫(kù)的惡意存取和破壞
  • 重要或敏感的數(shù)據(jù)被泄露
  • 安全環(huán)境的脆弱性

安全標(biāo)準(zhǔn):TCSEC:A1,B3,B2,B1,C2,C1,D

CC

用戶身份鑒別:靜態(tài)口令鑒別,動(dòng)態(tài)口令鑒別,生物特征鑒別,智能卡鑒別,入侵檢測(cè)

存取控制:自主存取控制DAC(C2級(jí)),強(qiáng)制存取控制MAC(B1級(jí))

自主存取控制

自主存取控制的缺點(diǎn)是可能存在數(shù)據(jù)無(wú)意識(shí)的泄露。因?yàn)閿?shù)據(jù)本身并無(wú)安全性標(biāo)記。

授權(quán)(grant)

GRANT <權(quán)限1>,<權(quán)限2>……		#全部,用all priviliges
ON <對(duì)象類型><對(duì)象名>,<對(duì)象類型2><對(duì)象名2>……
TO <用戶1>,<用戶2>……		#全部,用public
[with grant option]		#是否允許授權(quán)傳播
#注意不得循環(huán)授權(quán)

收回(revoke)

revoke <權(quán)限1>,<權(quán)限2>……		
on <對(duì)象類型><對(duì)象名>,<對(duì)象類型2><對(duì)象名2>……
from <用戶1>,<用戶2>……[cascade | restrict]

創(chuàng)建數(shù)據(jù)庫(kù)權(quán)限

create user <username> [with] [superuser | createdb] | password 'password';

數(shù)據(jù)庫(kù)角色

create role <角色名>			#創(chuàng)建角色
grant <權(quán)限> on <對(duì)象類型><對(duì)象名> to <角色>		#角色授權(quán)
grant <角色> to <角色/用戶> [with admin option] #角色授予其他角色/用戶,with admin option是否允許傳播
revoke <權(quán)限> on <對(duì)象類型><對(duì)象名> from <角色>	#角色授權(quán)收回

強(qiáng)制存取控制

強(qiáng)制存取控制是對(duì)數(shù)據(jù)本身進(jìn)行密級(jí)標(biāo)記,無(wú)論數(shù)據(jù)如何復(fù)制,標(biāo)記與數(shù)據(jù)是一個(gè)不可分的整體。

同時(shí)檢查DAC和MAC

每個(gè)數(shù)據(jù)庫(kù)對(duì)象被標(biāo)以一定的密級(jí),每一個(gè)用戶被授予某一個(gè)級(jí)別的許可證。對(duì)于任意一個(gè)對(duì)象,只有具有合法許可證的用戶才可以存取。主體對(duì)客體的存取必須遵循以下規(guī)則:

  • 主體許可證級(jí)別大于或等于客體密級(jí)時(shí),才能讀取客體
  • 主體許可證級(jí)別小于或等于客體密級(jí)時(shí),才能寫客體

第二條是為了防止高許可證級(jí)別的主體惡意降低高密級(jí)客體導(dǎo)致數(shù)據(jù)泄露。

視圖機(jī)制

與授權(quán)機(jī)制結(jié)合

審計(jì)

審計(jì)功能把用戶對(duì)數(shù)據(jù)庫(kù)的所有操作記錄下來(lái)放入審計(jì)日志。

審計(jì)員可以通過(guò)審計(jì)日志監(jiān)控?cái)?shù)據(jù)庫(kù)行為,找到非法存取數(shù)據(jù)的人,時(shí)間和內(nèi)容等。審計(jì)機(jī)制提供了一種事后安全檢查的機(jī)制。

DDL,DML,DCL分別是什么

show audit_trail
set audit_trail to on
audit alert,update on xxx by access	#對(duì)xxx進(jìn)行審計(jì)
noaudit alert,update on xxx		#取消對(duì)xxx進(jìn)行審計(jì)

數(shù)據(jù)加密(略)

存儲(chǔ)加密,傳輸加密

其他安全性保護(hù)

推理控制,隱蔽信道,數(shù)據(jù)隱私,“三權(quán)分立”的安全管理機(jī)制

5 數(shù)據(jù)庫(kù)完整性

★數(shù)據(jù)庫(kù)的完整性防范對(duì)象:不合語(yǔ)義、不正確的數(shù)據(jù),防止它們進(jìn)入數(shù)據(jù)庫(kù)。

數(shù)據(jù)庫(kù)數(shù)據(jù)的正確性相容性

據(jù)庫(kù)管理系統(tǒng)必須能夠?qū)崿F(xiàn)以下功能:

  • 提供定義完整性約束的機(jī)制
  • 提供檢查完整性約束的方法
  • 提供完整性的違約處理辦法

5.2 實(shí)體完整性

PRIMARY KEY 主碼

檢查主碼值是否唯一,檢查主碼的各個(gè)屬性是否為空,否則拒絕修改

5.3 參照完整性

FOREIGN KEY 外碼

對(duì)被參照表和參照表進(jìn)行修改時(shí)可能出現(xiàn)問題

違約處理策略:(一般采用默認(rèn),如果需要其他,則在創(chuàng)建參照表時(shí)顯式說(shuō)明)

  • 拒絕執(zhí)行(默認(rèn))
  • 級(jí)聯(lián)操作
  • 設(shè)置為空值

5.4 用戶定義的完整性

屬性上的約束(不滿足拒絕執(zhí)行)

  • 列值非空(NOT NULL)
  • 列值唯一(UNIQUE)
  • 檢查列值是否滿足一個(gè)條件表達(dá)式(CHECK短語(yǔ))

元組上的約束

違約處理:拒絕執(zhí)行

注意如何使用CHECK子句

5.5 完整性約束命名子句

完整性約束命名子句

CONSTRAINT <完整性約束名> <完整性約束>

包括NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK等子句

修改表中的完整性限制

ALTER TABLE xxxxxDROP CONSTRAINT C1ADD CONSTRAINT C2 NOT NULL

5.7 觸發(fā)器

事件-條件-動(dòng)作規(guī)則(ECArule)

類似約束,自動(dòng)激活,功能更強(qiáng)

定義觸發(fā)器

CREATE TRIGGER <觸發(fā)器名>
{BEFORE|AFTER} <觸發(fā)事件> ON <表名>		#觸發(fā)事件為INSERT,DELETE,UPDATE以及它們的and,or以及類似UPDATE <觸發(fā)列,……>具體指明操作列
REFERENCING NEW|OLD AS <變量>
FOR EACH {ROW|STATEMENT} 
[WHEN<觸發(fā)條件>]
<觸發(fā)動(dòng)作體>

教材舉例:

# 將INSERT語(yǔ)句增加的元組數(shù)記錄到insertlog中
CREATE TRIGGER Student_Count
AFTER INSERT ON Student
REFERENCINGNEW TABLE AS DELTA
FOR EACH STATEMENTINSERT INTO StudentInsertLog(Numbers)SELECT COUNT(*) FROM DELTA;
# 將分?jǐn)?shù)增加10%的操作添加到一個(gè)另一個(gè)表SC_U
CREATE TRIGGER SC_T
AFTER UPDATE ON SC
REFERENCINGOLDROW AS OldTupleNEWROW AS NewTuple
FOR EACH ROW
WHEN (NewTuple.Grade>=1.1*OldTuple.Grade)INSERT INTO SC_U (Sno,Cno,OldGrade,NewGrade)VALUES(OldTuple.Sno,OldTuple.Cno,ldTuple.Grade,NewTuple.Grade);
# 教授的工資不低于4000,低于4000則改為4000
CREATE TRIGGER Insert_Or_Update_Sal
BEFORE INSERT OR UPDATE ON Teacher
REFERENCING NEW row AS newtuple
FOR EACH ROW
BEGINIF(newtuple.Job=‘教授’) AND newtuple.Sal<4000)THEN newtuple.Sal:=4000;END IF;
END;

執(zhí)行觸發(fā)器(順序)

  • BEFORE觸發(fā)器
  • 激活該觸發(fā)器的SQL語(yǔ)句
  • AFTER觸發(fā)器

刪除觸發(fā)器

DROP TRIGGER <觸發(fā)器名> ON <表名>

【期中考試備考】

事務(wù)的四個(gè)特性:持久性,一致性,原子性,隔離性

SQL語(yǔ)言具有的功能:數(shù)據(jù)定義,數(shù)據(jù)操縱,數(shù)據(jù)控制

DML數(shù)據(jù)操縱語(yǔ)言,DBL數(shù)據(jù)定義語(yǔ)言

第二篇 設(shè)計(jì)與應(yīng)用開發(fā)篇

★6 關(guān)系數(shù)據(jù)理論

6.2 規(guī)范化

函數(shù)依賴:

  • X函數(shù)確定Y 或 Y函數(shù)依賴于X 記作 X→Y

  • 非平凡的函數(shù)依賴/平凡的函數(shù)依賴(X→Y但Y?X,則是平凡的)

  • 完全函數(shù)依賴/部分函數(shù)依賴(X推出Y時(shí)X中的各部分是否缺一不可,若X的一部分就可以推出Y,則是部分函數(shù)依賴)

  • 直接函數(shù)依賴/傳遞函數(shù)依賴(X→Y,Y不是平凡的,Y不能→X,Y→Z,Z不是平凡的,則X→Z有傳遞函數(shù)依賴)

(★不考)多值依賴:

  • 對(duì)于關(guān)系R(U,F),X+Y+Z=U,若存在(x,y1,z1),(x,y2,z2)時(shí),(x,y1,z2),(x,y2,z1)也同時(shí)存在,則多值函數(shù)依賴X→→Y。
  • 理解:x確定時(shí),y1到z的所有映射,y2都需要有。
  • 若Z=空集,則X→→Y為平凡的多值依賴

碼/鍵:

  • 候選碼:K-(F)->U,(U完全函數(shù)依賴于K),則K為R的候選碼。
  • 主碼:若候選碼多于一個(gè),可以指定一個(gè)為主碼。
  • 全碼:主碼就是全部屬性時(shí)。
  • 超碼:K-(P)->U,(U部分函數(shù)依賴于U),則K為超碼。
  • 外碼:R中屬性組X不是R的碼,但X是另一個(gè)關(guān)系模式的碼,X是R的外碼。
  • 候選碼的超集(若存在)一定是超碼,候選碼的任何真子集一定不是超碼

范式

在這里插入圖片描述

★不同等級(jí)的范式

  • 1NF(屬性值都是不可分的原子值)

  • 2NF(每一個(gè)非主屬性完全函數(shù)依賴于任何一個(gè)候選碼)

  • 3NF(在1NF基礎(chǔ)上,R不存在碼X屬性組Y非主屬性Z且Z不是Y的子集,X→Y,Y→Z,Y不能→X)【每一個(gè)非主屬性不傳遞依賴于碼,不部分依賴于碼】

  • BCNF(在1NF基礎(chǔ)上,X→Y且Y不是X子集,X必含有碼,即每一個(gè)決定因素必含有碼)【不存在任何屬性對(duì)候選碼的傳遞函數(shù)依賴】在3NF基礎(chǔ)上消除了主屬性對(duì)碼的部分函數(shù)依賴

  • (不考)4NF(在1NF基礎(chǔ)上,對(duì)于R的每個(gè)非平凡多值依賴X→→Y且Y不是X的子集,X都含有碼)

(應(yīng)試)掌握到3NF與BCNF即可,考題問是否能達(dá)到3NF

★6.3 數(shù)據(jù)依賴的公理系統(tǒng)

Armstrong公理系統(tǒng)

  • A1 自反律:若Y?X?U,則F邏輯蘊(yùn)涵X→Y
  • A2 增廣律:若F邏輯蘊(yùn)涵X→Y,Z?U,則F邏輯蘊(yùn)涵XZ→YZ
  • A3 傳遞律:若F邏輯蘊(yùn)涵X→Y,Y→Z,則F邏輯蘊(yùn)涵X→Z

根據(jù)A1,A2,A3可得以下推理規(guī)則

  • 合并規(guī)則:若X→Y,X→Z,則X→YZ
  • 分解規(guī)則:若X→Y,Z?Y,則X→Z
  • 偽傳遞規(guī)則:若X→Y,WY→Z,則WX→Z

引理:X→A1A2A3A4……Ak <<<充分必要>>> X→Ai成立(1<i<n)

Armstrong公理系統(tǒng)的有效性&完備性

  • 有效性:由F出發(fā),根據(jù)系統(tǒng)推導(dǎo)出來(lái)的每一個(gè)函數(shù)依賴一定在F+中
  • 完備性:F+中的每一個(gè)函數(shù)依賴,必定可以由F觸發(fā)根據(jù)系統(tǒng)推導(dǎo)出來(lái)

函數(shù)依賴集的閉包:

  • F為U上一組函數(shù)依賴,X?U,X在F上的閉包={A | X→A能由F根據(jù)Armstrong公理系統(tǒng)推導(dǎo)出}
  • 引理6.2:X,Y?U,X→Y能由F根據(jù)Armstrong公理系統(tǒng)推導(dǎo)出 <<<充分必要>>> Y?X在F上的閉包

函數(shù)依賴集的等價(jià)

  • 引理6.3 【F的閉包=G的閉包】 <<<充要條件>>> 【F的閉包?G的閉包】 && 【G的閉包?F的閉包】
  • 判斷是否【F?G的閉包】成立:逐一對(duì)F中的函數(shù)依賴X→Y,判斷Y?(G+在X中的閉包)是否成立即可。

★★★大題考察:

【書P187-189】

  • 求某個(gè)屬性組X在F上的閉包(【做法】由X和組成X的元素去做擴(kuò)散,看能推出哪些元素,自己自然是可以推出自己的)
  • 判斷該屬性組X是否為候選碼(閉包為全部屬性的集合)(【做法】如果推出的元素就是全集,那這就是候選碼)
  • (書上沒有)求解關(guān)系的候選碼(【思路】分為四類,L,R,LR,N,分別是只在左邊出現(xiàn),只在右邊出現(xiàn),左右都出現(xiàn),左右都不出現(xiàn),L和N必定是候選碼中的屬性,R必定不是,LR可能是)
  • 判斷兩個(gè)函數(shù)依賴集是否等價(jià)(【做法】假設(shè)對(duì)F和G判定,對(duì)F中所有的X→Y都做X在G中的閉包,看看Y是不是被包含,然后同理可得G中也是,就能證明是不是等價(jià)的)
  • 計(jì)算最小依賴集/最小覆蓋(【思路】①將右邊拆成單個(gè)屬性②試圖將左邊拆成單個(gè)屬性:若AB→C,若C∈A在F中的閉包,則B冗余(剝奪B,不影響,B多余)③試圖刪除某個(gè)關(guān)系:若 A→B,若B∈A在{F刪去A→B}的閉包,則該關(guān)系冗余(剝奪該關(guān)系,該關(guān)系的左值仍能推出右值,該關(guān)系冗余))
  • 【具體做法】【圖片】
  • 檢驗(yàn)F是否為最小依賴集(計(jì)算出來(lái)是自己)

7 數(shù)據(jù)庫(kù)設(shè)計(jì)

★7.1 數(shù)據(jù)庫(kù)設(shè)計(jì)概述

數(shù)據(jù)庫(kù)一般設(shè)計(jì)過(guò)程

  • 需求分析階段:準(zhǔn)確了解與分析用戶需求(包括數(shù)據(jù)與處理),需求分析如果不好可能會(huì)導(dǎo)致整個(gè)數(shù)據(jù)庫(kù)重做。
  • 概念結(jié)構(gòu)設(shè)計(jì)階段:通過(guò)對(duì)用戶需求進(jìn)行綜合、歸納與抽象,形成一個(gè)獨(dú)立于具體數(shù)據(jù)庫(kù)管理系統(tǒng)的概念模型。
  • 邏輯結(jié)構(gòu)設(shè)計(jì)階段:將概念結(jié)構(gòu)轉(zhuǎn)換為某個(gè)數(shù)據(jù)庫(kù)管理系統(tǒng)所支持的數(shù)據(jù)模型,并對(duì)其進(jìn)行優(yōu)化。
  • 物理結(jié)構(gòu)設(shè)計(jì)階段:為邏輯數(shù)據(jù)模型選取一個(gè)最適合應(yīng)用環(huán)境的物理結(jié)構(gòu)(包括存儲(chǔ)結(jié)構(gòu)和存取方法)。
  • 數(shù)據(jù)庫(kù)實(shí)施階段:設(shè)計(jì)人員運(yùn)用數(shù)據(jù)庫(kù)管理系統(tǒng)提供的數(shù)據(jù)語(yǔ)言、工具及宿主語(yǔ)言,根據(jù)邏輯設(shè)計(jì)和物理設(shè)計(jì)的結(jié)果建立數(shù)據(jù)庫(kù),編制與調(diào)試應(yīng)用程序,組織數(shù)據(jù)入庫(kù),并進(jìn)行試運(yùn)行。
  • 數(shù)據(jù)庫(kù)運(yùn)行和維護(hù)階段:在數(shù)據(jù)庫(kù)系統(tǒng)運(yùn)行過(guò)程中對(duì)其進(jìn)行評(píng)價(jià)、調(diào)整與修改。

7.2 需求分析

數(shù)據(jù)字典,包括下列5項(xiàng)

  • 數(shù)據(jù)項(xiàng):不可再分的數(shù)據(jù)單位

  • 數(shù)據(jù)結(jié)構(gòu):反映數(shù)據(jù)項(xiàng)之間的組合關(guān)系。數(shù)據(jù)結(jié)構(gòu)可由數(shù)據(jù)項(xiàng)/數(shù)據(jù)結(jié)構(gòu)混合組成。

  • 數(shù)據(jù)流:數(shù)據(jù)結(jié)構(gòu)在系統(tǒng)內(nèi)傳輸?shù)穆窂?/p>

  • 數(shù)據(jù)存儲(chǔ):數(shù)據(jù)結(jié)構(gòu)停留或保存的地方,也是數(shù)據(jù)流的來(lái)源和去向之一。

  • 處理過(guò)程:判定表/判定樹

7.3 概念結(jié)構(gòu)設(shè)計(jì)

概念模型:①真實(shí)充分反映現(xiàn)實(shí)世界,②易于理解,③易于更改,④易于向關(guān)系模型,網(wǎng)狀模型,層次模型等數(shù)據(jù)模型進(jìn)行轉(zhuǎn)換。

E-R模型:

實(shí)體之間的聯(lián)系:

  • 兩個(gè)實(shí)體型之間:一對(duì)一聯(lián)系,一對(duì)多聯(lián)系,多對(duì)多聯(lián)系
  • 兩個(gè)以上實(shí)體型:
  • 單個(gè)實(shí)體型內(nèi):

E-R圖:

  • 實(shí)體型:矩形
  • 屬性:橢圓形
  • 聯(lián)系:菱形
  • 無(wú)向邊:需要標(biāo)注聯(lián)系的類型(1:1,1:m,m:n等)

【考試:先畫含屬性的實(shí)體型圖,再畫一張不含屬性但含聯(lián)系的實(shí)體型圖】

用E-R圖進(jìn)行概念結(jié)構(gòu)設(shè)計(jì):

  • 實(shí)體與屬性劃分原則:屬性為①不可再分的數(shù)據(jù)項(xiàng) ②與別的實(shí)體無(wú)聯(lián)系

E-R圖集成:

  • 自頂向下需求分析,自底向上設(shè)計(jì)概念結(jié)構(gòu)

過(guò)程:

(1)合并E-R圖,生成初步E-R圖

  • 屬性沖突:屬性域沖突,屬性取值單位沖突
  • 命名沖突:同名異義,異名同義
  • 結(jié)構(gòu)沖突:①同一對(duì)象在不同應(yīng)用中具有不同的抽象 ②同一實(shí)體在不同子系統(tǒng)的E-R圖中包含的屬性個(gè)數(shù)和次序不一致 ③……

(2)消除不必要的冗余,設(shè)計(jì)基本E-R圖

  • 分析法:【……不是考察重點(diǎn),不再展開……】

  • 規(guī)范化理論:【……不是考察重點(diǎn),不再展開……】

7.4 邏輯結(jié)構(gòu)設(shè)計(jì)

E-R圖向關(guān)系模型的轉(zhuǎn)換

  • 1:1的聯(lián)系:可以轉(zhuǎn)換為一個(gè)獨(dú)立的關(guān)系模式,也可以與任意一端對(duì)于的關(guān)系模式合并。
  • 1:n的聯(lián)系:可以轉(zhuǎn)換為一個(gè)獨(dú)立的關(guān)系模式,也可以與n端對(duì)應(yīng)的關(guān)系模式合并。
  • m:n的聯(lián)系:轉(zhuǎn)換為一個(gè)獨(dú)立的關(guān)系模式。各實(shí)體的碼組成關(guān)系的碼或關(guān)系碼的一部分。
  • 三個(gè)或三個(gè)以上實(shí)體間的一個(gè)多元聯(lián)系可以轉(zhuǎn)換為一個(gè)關(guān)系模式
  • 具有相同碼的關(guān)系模式可以合并

數(shù)據(jù)模型的優(yōu)化

以規(guī)范化理論為指導(dǎo):【5條】

水平分解:把(基本)關(guān)系的元組分為若干子集合

垂直分解:把關(guān)系模式R的屬性分解為若干子集合

7.5 物理結(jié)構(gòu)設(shè)計(jì)

  • 物理結(jié)構(gòu):主要是存取方法和存取結(jié)構(gòu)
  • 對(duì)物理結(jié)構(gòu)進(jìn)行評(píng)價(jià):時(shí)間/空間效率

數(shù)據(jù)庫(kù)物理結(jié)構(gòu)設(shè)計(jì)的內(nèi)容和方法

選擇關(guān)系模式存取方法

(1)B+樹索引方法的選擇

  • 一個(gè)/一組屬性經(jīng)常在查詢條件中出現(xiàn),考慮在這個(gè)/這組屬性上建立索引
  • 一個(gè)屬性經(jīng)常作為最大值和最小值等聚集函數(shù)的參數(shù),考慮在這個(gè)屬性上建立索引
  • 一個(gè)/一組屬性經(jīng)常在連接操作的連接條件中出現(xiàn),考慮在這個(gè)/這組屬性上建立索引。

維護(hù)索引要代價(jià),索引不是越多越好

(2)哈希索引方法的選擇

①大小可預(yù)知且不變,或②關(guān)系大小動(dòng)態(tài)改變,但DBMS支持動(dòng)態(tài)哈希索引方法

(3)聚簇方法的選擇

提高某個(gè)屬性(組)的查詢速度,把這個(gè)或這些屬性上具有相同值的元組集中存放在連續(xù)的物理塊。該屬性(組)稱聚簇碼。

設(shè)計(jì)候選聚簇【3條,略】

檢查候選聚簇中的關(guān)系,取消不必要的關(guān)系【3條,略】

確定數(shù)據(jù)庫(kù)的存儲(chǔ)結(jié)構(gòu)

  • 確定數(shù)據(jù)存放位置
  • 確定系統(tǒng)配置

評(píng)價(jià)數(shù)據(jù)庫(kù)的物理結(jié)構(gòu):存儲(chǔ)空間,存取時(shí)間,維護(hù)代價(jià)等

重組和重構(gòu)

  • 數(shù)據(jù)庫(kù)重組:不修改原設(shè)計(jì)的邏輯和物理結(jié)構(gòu)
  • 數(shù)據(jù)庫(kù)重構(gòu):部分修改數(shù)據(jù)庫(kù)的模式和內(nèi)模式

7.6 數(shù)據(jù)庫(kù)的實(shí)施和維護(hù)

數(shù)據(jù)的載入和應(yīng)用程序的編碼與調(diào)試

數(shù)據(jù)庫(kù)的試運(yùn)行

數(shù)據(jù)庫(kù)的運(yùn)行和維護(hù)

  • 數(shù)據(jù)庫(kù)的轉(zhuǎn)出和恢復(fù)
  • 數(shù)據(jù)庫(kù)的安全性/完整性控制
  • 數(shù)據(jù)庫(kù)性能的監(jiān)督,分析和改造
  • 數(shù)據(jù)庫(kù)的重組與重構(gòu):重組(不修改邏輯和物理結(jié)構(gòu)),重構(gòu)(部分修改數(shù)據(jù)庫(kù)的模式和內(nèi)模式)

【不考】8 數(shù)據(jù)庫(kù)編程

8.1 擴(kuò)展SQL功能

with子句


WITH RECURSIVE 子句


內(nèi)置函數(shù)


通過(guò)高級(jí)語(yǔ)言實(shí)現(xiàn)復(fù)雜應(yīng)用

8.2 過(guò)程化SQL

過(guò)程化SQL的基本結(jié)構(gòu)


變量/常量定義


流程控制:條件控制/循環(huán)控制/錯(cuò)誤處理


存儲(chǔ)過(guò)程:創(chuàng)建/執(zhí)行/修改/刪除/優(yōu)點(diǎn)


# 優(yōu)點(diǎn)
運(yùn)行效率更高,降低了客戶機(jī)和服務(wù)器間的通信量,方便實(shí)施企業(yè)規(guī)則

存儲(chǔ)函數(shù)(必須指定返回類型):創(chuàng)建/執(zhí)行/修改

CREATE OR REPLACE FUNCTION 函數(shù)名
RETURNS <類型>
AS <過(guò)程化SQL>

8.3 JDBC編程

Java DataBase Connectivity

結(jié)構(gòu):用戶應(yīng)用程序,JDBC驅(qū)動(dòng)程序管理器,數(shù)據(jù)源

使用JDBC操縱數(shù)據(jù)庫(kù)的工作流程

  • 加載驅(qū)動(dòng)程序
  • 建立于數(shù)據(jù)庫(kù)的連接
  • 執(zhí)行SQL語(yǔ)句
  • 處理結(jié)果集
  • 釋放資源

【書P263有完整案例】

【不考】9 關(guān)系數(shù)據(jù)庫(kù)存儲(chǔ)管理

了解 B+樹索引,哈希索引

10 關(guān)系查詢處理和查詢優(yōu)化

10.1 關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)的查詢處理

查詢處理步驟:

  • 查詢分析( 詞法+語(yǔ)法),
  • 查詢檢查(語(yǔ)義,符號(hào)名轉(zhuǎn)換安全性,完整性,這一步生成語(yǔ)法樹),
  • 查詢優(yōu)化(代數(shù)優(yōu)化:關(guān)系代數(shù)表達(dá)式的優(yōu)化,物理優(yōu)化:存取路徑和底層操作算法的優(yōu)化,生成查詢執(zhí)行計(jì)劃),
  • 查詢執(zhí)行(代碼生成器生成具體代碼)

實(shí)現(xiàn)查詢操作的算法:

選擇操作:

  • 全表掃描算法
  • 索引掃描算法
  • (選擇率大小不同,效率不同,根據(jù)結(jié)果集來(lái)選擇,如果結(jié)果集比較小,就用索引,否則全表掃描)

連接操作:

  • 嵌套循環(huán)連接算法(假設(shè)內(nèi)存最大M塊,A表先讀M-1塊,B表先讀1塊,進(jìn)行匹配,然后B表下一塊,B表讀完后,A表再繼續(xù)下一個(gè)M-1塊,直至全部結(jié)束),
  • 排序合并連接算法(先對(duì)連接屬性排序,然后對(duì)于同一個(gè)A表按順序讀B表,讀到B表第一個(gè)連接屬性不同的就返回A表讀下一個(gè)),
  • 索引連接算法(建立連接屬性的索引,然后根據(jù)索引查找并連接),
  • 哈希連接算法(劃分/創(chuàng)建階段:以連接屬性作為哈希碼,把較小的表映射到桶中,試探/連接階段:另一個(gè)表進(jìn)行散列,然后桶中再進(jìn)行匹配)

10.2 關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)的查詢優(yōu)化

查詢優(yōu)化:選擇有效的策略,求得給定關(guān)系表達(dá)式的值,使得查詢代價(jià)較小。

★一個(gè)實(shí)例P308【可考計(jì)算題】

10.3 代數(shù)優(yōu)化

通過(guò)對(duì)關(guān)系代數(shù)表達(dá)式的等價(jià)變換來(lái)提高查詢效率

關(guān)系代數(shù)表達(dá)式等價(jià)變換規(guī)則【書P309-310】

語(yǔ)法樹的啟發(fā)式優(yōu)化【5條啟發(fā)式規(guī)則】

★大題:畫語(yǔ)法樹,關(guān)系代數(shù)語(yǔ)法樹,優(yōu)化后的語(yǔ)法樹

10.4 物理優(yōu)化

可供選擇的方法有

  • 基于啟發(fā)式規(guī)則的優(yōu)化
  • 基于代價(jià)估算的優(yōu)化
  • 兩者結(jié)合

基于啟發(fā)式規(guī)則的優(yōu)化:

選擇操作的啟發(fā)式規(guī)則:

  • 小關(guān)系:用全表順序掃描
  • 大關(guān)系:
  • 【5條】書P313

連接操作的啟發(fā)式規(guī)則:

  • 【4條】書P313
  • 選用嵌套循環(huán)連接算法時(shí),選擇其中占用塊數(shù)B較小的表作為外表

基于代價(jià)估算的優(yōu)化

【書P314】

★本章重要簡(jiǎn)答題

1.試述關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)查詢優(yōu)化的一般準(zhǔn)則。

記憶:選擇怎么樣?投影怎么樣?選擇和投影可以怎么樣?選擇和笛卡爾積可以怎么樣?公共子表達(dá)式?連接算法?

(1)盡可能先做選擇運(yùn)算
(2)投影運(yùn)算和選擇運(yùn)算應(yīng)同時(shí)進(jìn)行
(3)把投影和其前后的雙目運(yùn)算結(jié)合起來(lái)
(4)把某些選擇與在它前面要執(zhí)行的笛卡爾積結(jié)合起來(lái)成為一個(gè)連接運(yùn)算
(5)找出公共子表達(dá)式
(6)選取合適的連接算法

2.試述關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)查詢優(yōu)化的一般步驟。

記憶:畫語(yǔ)法樹,優(yōu)化,存取路徑,查詢計(jì)劃

(1)把查詢轉(zhuǎn)換成某種內(nèi)部表示,通常用的內(nèi)部表示是語(yǔ)法樹
(2)利用優(yōu)化算法,優(yōu)化語(yǔ)法樹
(3)選擇低層的存取路徑
(4)生成查詢計(jì)劃并選擇其中代價(jià)最小的一種

11 數(shù)據(jù)庫(kù)恢復(fù)技術(shù)

11.1 事務(wù)的基本概念

事務(wù)(transaction):用戶定義的一個(gè)數(shù)據(jù)庫(kù)操作序列,不做或全做,這個(gè)工作單位不可分割。

顯式定義事務(wù)

BEGIN TRANSACTION;
COMMIT;		//正常結(jié)束,提交,所有更新寫回物理數(shù)據(jù)庫(kù)
ROLLBACK;	//發(fā)生錯(cuò)誤,回滾,事務(wù)中發(fā)生的操作全部撤銷

★事務(wù)的ACID特性

  • 原子性(atomicity):事務(wù)中的操作要么不做要么全做。
  • 一致性(consistency):事務(wù)執(zhí)行的結(jié)果必須使數(shù)據(jù)庫(kù)從一個(gè)一致性狀態(tài)轉(zhuǎn)移到另一個(gè)一致性狀態(tài)。即完整性。
  • 隔離性(isolation):一個(gè)事務(wù)的執(zhí)行不能被其它事務(wù)干擾。
  • 持續(xù)性(durability):一個(gè)事務(wù)一旦提交,它對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)的改變是永久性的,接下來(lái)其它操作或故障不會(huì)對(duì)它的執(zhí)行結(jié)果造成影響。

事務(wù)ACID遭破壞的可能因素:

  • 多個(gè)事務(wù)并行運(yùn)行,不同事務(wù)的操作交叉執(zhí)行(并發(fā)控制機(jī)制)
  • 事務(wù)在運(yùn)行過(guò)程中被強(qiáng)行停止(恢復(fù)機(jī)制)

★11.3 故障的種類

  • 事務(wù)內(nèi)部的故障:事務(wù)沒有到達(dá)預(yù)期的終點(diǎn)(COMMIT或顯式ROLLBACK)
  • 系統(tǒng)故障:(軟故障)造成系統(tǒng)停止運(yùn)轉(zhuǎn),系統(tǒng)要重新啟動(dòng)(尚未完成的數(shù)據(jù)送入物理數(shù)據(jù)庫(kù),破壞原子性/一致性;內(nèi)存/緩沖區(qū)數(shù)據(jù)丟失,破壞事務(wù)持續(xù)性)
  • 介質(zhì)故障:(硬故障)外存故障:磁盤損壞,磁頭碰撞,瞬間強(qiáng)磁場(chǎng)干擾,破壞硬盤數(shù)據(jù)的計(jì)算機(jī)病毒等。

11.4 數(shù)據(jù)庫(kù)恢復(fù)的實(shí)現(xiàn)技術(shù)

  • 本質(zhì):建立冗余數(shù)據(jù)
  • 方法:數(shù)據(jù)轉(zhuǎn)儲(chǔ)(dump)和登記日志文件

分類:

  • 事務(wù)故障&系統(tǒng)故障:記錄事務(wù)更新對(duì)象舊值和新值(日志文件),回滾未提交的事務(wù)(恢復(fù)為舊值),重做已提交的事務(wù)(更新為新值),(日志logging技術(shù))

  • 介質(zhì)故障:重載備份(數(shù)據(jù)備份backup技術(shù))

數(shù)據(jù)轉(zhuǎn)儲(chǔ)(數(shù)據(jù)備份backup技術(shù))

  • 靜態(tài)備份:備份開始時(shí)處于一致性狀態(tài),且沒有事務(wù)正在進(jìn)行(優(yōu):實(shí)現(xiàn)簡(jiǎn)單;缺:必須等待事務(wù)結(jié)束,新事務(wù)等待備份結(jié)束)

  • 動(dòng)態(tài)備份:備份操作與用戶事務(wù)并發(fā)進(jìn)行(優(yōu):不用等待結(jié)束,不會(huì)影響新事務(wù)進(jìn)行;缺:僅依靠后備副本無(wú)法保證數(shù)據(jù)有效)

  • 全量備份

  • 增量備份

登記日志文件(日志logging技術(shù))

  • Undo日志:先寫日志,后寫數(shù)據(jù),最后寫提交標(biāo)記

  • Redo日志:先寫日志,再寫提交標(biāo)記,最后寫數(shù)據(jù)

  • Undo/Redo日志:先寫日志,后寫數(shù)據(jù)

★為什么要先寫日志,后寫數(shù)據(jù)?

  • 這兩者之間可能發(fā)生故障,若先寫日志后發(fā)生故障,恢復(fù)時(shí)多做一次不必要的Undo操作,不會(huì)影響數(shù)據(jù)庫(kù)正確性。若先寫數(shù)據(jù)后發(fā)生故障,因?yàn)闆]有日志所以無(wú)法恢復(fù)。

★11.5 恢復(fù)策略

事務(wù)故障:

  • 因?yàn)橹皇窃撌聞?wù)發(fā)生的故障
  • 反向掃描日志文件,對(duì)該事務(wù)的更新操作做逆操作,直到讀到此事務(wù)的開始標(biāo)記

在這里插入圖片描述

在這里插入圖片描述

系統(tǒng)故障:

  • 正向掃描日志文件,找出故障發(fā)送前已提交的事務(wù)(有BEGIN TRANSACTION 和 COMMIT),放入REDO-LIST。找出故障時(shí)尚未完成的事務(wù)(只有BEGIN TRANSACTION 但無(wú) COMMIT),放入U(xiǎn)NDO-LIST。

  • 對(duì)UNDO-LIST中的事務(wù)做撤銷(反向掃描日志文件,對(duì)每個(gè)更新操作做逆操作,即“更新前的值”寫入數(shù)據(jù)庫(kù))

  • 對(duì)REDO-LIST中的事務(wù)做重做(正向掃描日志文件,重新執(zhí)行日志文件登記操作,即“更新后的值”寫入數(shù)據(jù)庫(kù))

在這里插入圖片描述

在這里插入圖片描述

介質(zhì)故障:

  • 裝入最新數(shù)據(jù)庫(kù)后備副本,恢復(fù)數(shù)據(jù)庫(kù)到最近的一致狀態(tài)
  • 裝入相應(yīng)的日志文件副本,重做已完成的事務(wù)

在這里插入圖片描述

在這里插入圖片描述

★11.6 具有檢查點(diǎn)的恢復(fù)技術(shù)

問題:搜索整個(gè)日志很耗時(shí),重新執(zhí)行浪費(fèi)大量時(shí)間,日志存儲(chǔ)代價(jià)很大。為了解決這個(gè)問題,新增檢查點(diǎn)。

檢查點(diǎn)記錄{①建立檢查點(diǎn)時(shí)刻所有正在執(zhí)行的事務(wù)清單 ②這些事務(wù)最近一個(gè)日志記錄的地址}

重新開始文件:存放各個(gè)檢查點(diǎn)在日志文件中的地址

在這里插入圖片描述

利用檢查點(diǎn)恢復(fù)的步驟:

  • 從“重新開始文件”中找到最后一個(gè)“檢查點(diǎn)記錄”的地址,在日志文件中找到最后一個(gè)“檢查點(diǎn)記錄”。
  • 建立事務(wù)隊(duì)列UNDO-LIST和REDO-LIST,檢查點(diǎn)時(shí)的ACTIVE-LIST初始放入U(xiǎn)NDO-LIST
  • 正向掃描直至結(jié)束:若某任務(wù)START,放入U(xiǎn)NDO-LIST;若某任務(wù)COMMIT,放入REDO-LIST
  • 對(duì)UNDO-LIST中的事務(wù),從結(jié)束逆向到最后檢查點(diǎn)開始做UNDO,但對(duì)于在檢查點(diǎn)記錄中的ACTIVE事務(wù),要繼續(xù)回推到該事務(wù)的START(總結(jié),UNDO-LIST中的事務(wù)都要完整從結(jié)束反推回START)
  • 對(duì)REDO-LIST中的事務(wù),從最后檢查點(diǎn)開始正向掃描,對(duì)每一條做REDO

具體案例:

在這里插入圖片描述

在這里插入圖片描述

11.7 數(shù)據(jù)庫(kù)鏡像(了解)

復(fù)制主數(shù)據(jù)庫(kù)到別的地方,可以同時(shí)便利并發(fā)操作的讀取。

12 并發(fā)控制

單處理機(jī)系統(tǒng)中,事務(wù)的并行執(zhí)行實(shí)際上是這些并發(fā)事務(wù)的并行操作輪流交叉運(yùn)行。稱為:交叉并發(fā)方式。

12.1 并發(fā)控制概述

事務(wù)是并發(fā)控制的基本單位。目標(biāo)是保證事務(wù)的隔離性和一致性。

并發(fā)操作帶來(lái)的不一致性主要有:

  • 丟失修改(T1和T2讀入同一數(shù)據(jù)各自修改,T2的提交破壞了 T1的修改,導(dǎo)致T1的修改被丟失)
  • 臟讀(T1提交的數(shù)據(jù)被T2讀取后又被撤銷,此時(shí)T2讀到的數(shù)據(jù)就是臟的,即不正確的)
  • 不可重復(fù)讀(T1讀取數(shù)據(jù)后,T2對(duì)記錄中的數(shù)據(jù)更新,使得T1再次讀取時(shí)得到與之前不一致的值)
  • 幻讀(T1讀取數(shù)據(jù)后,T2對(duì)部分記錄插入或刪除,使得T1再次讀取時(shí)發(fā)現(xiàn)一些記錄小時(shí)了或者多出來(lái)了)

并發(fā)控制的主要技術(shù):封鎖(locking),時(shí)間戳(timestamp),樂觀方法,多版本并發(fā)控制

12.2 事務(wù)的隔離級(jí)別

由低到高(數(shù)據(jù)一致性增強(qiáng),系統(tǒng)代價(jià)增高):

  • 讀未提交:允許一個(gè)事務(wù)讀取另一個(gè)未提交事務(wù)正在修改的數(shù)據(jù)(避免丟失修改)
  • 讀已提交:只允許一個(gè)事務(wù)讀取一個(gè)已提交的數(shù)據(jù)(避免丟失修改,避免臟讀)
  • 可重復(fù)讀:一個(gè)十五開始讀取數(shù)據(jù)后,其他事務(wù)就不能再對(duì)該數(shù)據(jù)執(zhí)行更新操作(避免丟失修改,避免臟讀,避免不可重復(fù)讀)
  • 可串行化:事務(wù)執(zhí)行順序可串行化(避免所有)

12.3 封鎖

封鎖:事務(wù)T對(duì)某個(gè)數(shù)據(jù)對(duì)象操作前先向系統(tǒng)申請(qǐng)加鎖

基本封鎖類型:

  • 排他型鎖(X鎖):寫鎖,只允許事務(wù)T讀取修改A,不允許別的事務(wù)加鎖。
  • 共享型鎖(S鎖):讀鎖,允許事務(wù)T讀取A不能修改A,允許別的事務(wù)加S鎖但不能X鎖。

相容矩陣:只有S鎖和S鎖自己可相容,另:空跟別的都可相容

12.4 封鎖協(xié)議

三級(jí)封鎖協(xié)議:定義何時(shí)申請(qǐng)鎖,持續(xù)時(shí)間,何時(shí)釋放

  • 一級(jí)封鎖協(xié)議:長(zhǎng)寫鎖。事務(wù)T修改數(shù)據(jù)R前加X鎖,事務(wù)結(jié)束后釋放。(【沒有丟失修改】不保證不臟讀,不保證可重復(fù)讀)
  • 二級(jí)封鎖協(xié)議:長(zhǎng)寫鎖+短讀鎖。在一級(jí)協(xié)議上,新增:事務(wù)T讀數(shù)據(jù)R前加S鎖,讀完就可釋放。(【不臟讀】不保證可重復(fù)讀)
  • 三級(jí)封鎖協(xié)議:長(zhǎng)寫鎖+長(zhǎng)讀鎖。在一級(jí)協(xié)議上,新增:事務(wù)T讀數(shù)據(jù)R前加S鎖,事務(wù)結(jié)束才可釋放?!究芍貜?fù)讀】

12.5 活鎖和死鎖

活鎖

原因:多個(gè)事務(wù)請(qǐng)求同一個(gè),但有可能先允許了后面的事務(wù),導(dǎo)致前面的事務(wù)一直等待,餓死。

解決方法:采取先來(lái)先服務(wù)的策略

死鎖

原因:T1和T2各自封鎖對(duì)方想要獲得的資源,并同時(shí)請(qǐng)求自己想要獲得的資源

死鎖的預(yù)防;

  • 一次封鎖法:一次性將所有數(shù)據(jù)全部加鎖
  • 順序封鎖法:預(yù)先規(guī)定封鎖順序,所有事務(wù)都按照這個(gè)順序封鎖。

死鎖的診斷與解除:

  • 超時(shí)法:超過(guò)規(guī)定時(shí)間就認(rèn)為發(fā)生了死鎖
  • 事務(wù)等待圖法:有向圖,節(jié)點(diǎn)為事務(wù),邊指向等待的事務(wù),若出現(xiàn)回路,則存在死鎖

12.6 并發(fā)調(diào)度的可串行性

調(diào)度不同,可能結(jié)果不同,存在一種正確調(diào)度。

  • 串行調(diào)度:(串行調(diào)度的并發(fā)執(zhí)行必然是正確的)

  • 可串行化調(diào)度:這種調(diào)度方式產(chǎn)生的結(jié)果與某次串行調(diào)度產(chǎn)生的結(jié)果相同。(可串行化調(diào)度的并發(fā)執(zhí)行是正確的)

  • 沖突可串行化調(diào)度:這種調(diào)度在保證沖突操作次序不變的情況下,通過(guò)交換兩個(gè)事務(wù)不沖突操作的次序得到的另一個(gè)調(diào)度是串行的,則該事務(wù)是沖突可串行化的,也必然是可串行化的(充分條件:沖突可串行化→可串行化)

  • 沖突操作:不同事務(wù)對(duì)同一數(shù)據(jù)的讀寫/寫寫操作

  • 【不同事務(wù)的沖突操作】和【同一事務(wù)的兩個(gè)操作】順序不能互換

做題:判斷一個(gè)調(diào)度是否沖突可串行化調(diào)度?在規(guī)則允許的范圍內(nèi)盡可能交換事務(wù)中各語(yǔ)句的次序,使得事務(wù)能盡可能分離開來(lái),變成串行的,如果能辦到,就是沖突可串行化調(diào)度。

【期末考試8分】例題:R3(B)R1(A)W3(B)R2(B)R2(A)W2(B)R1(B)W1(A),該調(diào)度是沖突可串行化的調(diào)度嗎?為什么?

對(duì)原式中R1(A)依次與右邊的鄰居交換最終得到R3(B)W3(B)R2(B)R2(A)W2(B)R1(A)R1(B)W1(A)這是一個(gè)串行調(diào)度,故原調(diào)度是沖突可串行化調(diào)度。

12.7 兩段鎖協(xié)議

為了保證調(diào)度可串行化,使用兩段封鎖(two-phase lock,2PL)來(lái)實(shí)現(xiàn)可串行化。

遵守兩段鎖協(xié)議的一定是可串行化的。

所有事務(wù)必須分兩個(gè)階段對(duì)數(shù)據(jù)項(xiàng)加鎖和解鎖(讀寫之前申請(qǐng)封鎖,釋放鎖后,不再申請(qǐng)和獲得封鎖)

  • 擴(kuò)展階段:獲得封鎖
  • 收縮階段:釋放封鎖

★一次封鎖法<>兩段鎖協(xié)議

一次封鎖法遵守兩段鎖協(xié)議,但兩段鎖協(xié)議不要求一次封鎖,故兩段鎖協(xié)議仍然可能發(fā)生死鎖

12.8 封鎖的粒度

封鎖粒度:封鎖對(duì)象的大小(可以是邏輯單元:屬性值,屬性值集合,元組,關(guān)系,索引項(xiàng),整個(gè)索引,整個(gè)數(shù)據(jù)庫(kù);物理單元:數(shù)據(jù)頁(yè),索引頁(yè);物理記錄等)

封鎖粒度↑,并發(fā)度↓,系統(tǒng)開銷↓

多粒度封鎖

多粒度樹(根節(jié)點(diǎn)表示整個(gè)數(shù)據(jù)庫(kù),往下層次依次關(guān)系,元組等)

多粒度封鎖協(xié)議:允許該樹中的每個(gè)節(jié)點(diǎn)被獨(dú)立加鎖,加一個(gè)節(jié)點(diǎn)的鎖時(shí),其子樹上的節(jié)點(diǎn)都加鎖

  • 顯式封鎖:直接加到該節(jié)點(diǎn)的鎖

  • 隱式封鎖:由于其上級(jí)節(jié)點(diǎn)被加鎖而被加鎖

意向鎖:表明該節(jié)點(diǎn)的子樹上的節(jié)點(diǎn)正在被加鎖。對(duì)任意節(jié)點(diǎn)加鎖時(shí),其所有上層節(jié)點(diǎn)都要加意向鎖。

  • 意向共享型鎖(IS):其子樹上的節(jié)點(diǎn)想加S鎖
  • 意向排他型鎖(IX):其子樹上的節(jié)點(diǎn)想加X鎖
  • 共享意向排他型鎖(SIX鎖):先加S鎖再加IX鎖
  • SIX例子:對(duì)某個(gè)表加SIX鎖,讀取整個(gè)表,但更新部分元組。
  • 鎖的強(qiáng)度關(guān)系:X>SIX>S,IX>IS

具有意向鎖的多粒度封鎖方法,提高了系統(tǒng)并發(fā)度,減少了加鎖和解鎖開銷。

【期末考試復(fù)習(xí)】

【老師提供】數(shù)據(jù)庫(kù)系統(tǒng)期末考試復(fù)習(xí)提綱(2023)

第一章 緒論

1.1 數(shù)據(jù)庫(kù)的 4 個(gè)基本概念(數(shù)據(jù)、數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)管理系統(tǒng)和數(shù)據(jù)庫(kù)系統(tǒng))

  • 數(shù)據(jù),是描述事物的符號(hào)記錄。

  • 數(shù)據(jù)庫(kù)(DB),是長(zhǎng)期存儲(chǔ)在計(jì)算機(jī)內(nèi)、有組織、可共享的大量數(shù)據(jù)的集合。

  • 數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS),位于用戶與OS之間的數(shù)據(jù)管理軟件。

  • 數(shù)據(jù)庫(kù)系統(tǒng)(DBS),是由DB、DBMS及其應(yīng)用開發(fā)工具、應(yīng)用程序和DBA組成的存儲(chǔ)、管理、處理和維護(hù)數(shù)據(jù)的系統(tǒng)。

1.2 數(shù)據(jù)庫(kù)系統(tǒng)的特點(diǎn)、數(shù)據(jù)庫(kù)系統(tǒng)與文件系統(tǒng)的區(qū)別與聯(lián)系

  • 特點(diǎn):數(shù)據(jù)共享性高,冗余度低且易擴(kuò)充,獨(dú)立性高,整體數(shù)據(jù)的結(jié)構(gòu)化。
  • 聯(lián)系:文件系統(tǒng)和數(shù)據(jù)庫(kù)系統(tǒng)都用于存儲(chǔ)和管理數(shù)據(jù)

1.3 數(shù)據(jù)模型及三要素

  • 數(shù)據(jù)模型:對(duì)現(xiàn)實(shí)世界數(shù)據(jù)特征的抽象
  • 三要素:數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)操作,完整性約束
  • 數(shù)據(jù)結(jié)構(gòu):描述數(shù)據(jù)庫(kù)的組成對(duì)象以及對(duì)象之間的聯(lián)系。
  • 數(shù)據(jù)操作:對(duì)數(shù)據(jù)庫(kù)中各種對(duì)象的實(shí)例允許執(zhí)行的操作的集合,包括操作及有關(guān)的操作規(guī)則。
  • 完整性約束:一組完整性規(guī)則。

1.4 數(shù)據(jù)庫(kù)系統(tǒng)的三級(jí)模式結(jié)構(gòu)(外模式、模式、內(nèi)模式)

數(shù)據(jù)庫(kù)的二級(jí)映像功能與數(shù)據(jù)獨(dú)立性(邏輯獨(dú)立性、物理獨(dú)立性)

第二章 關(guān)系數(shù)據(jù)庫(kù)

2.1 碼、主屬性、非主屬性、外碼

2.2 關(guān)系代數(shù) 并、差、交、笛卡爾積、選擇、投影、連接、除運(yùn)算。

2.3 關(guān)系代數(shù)查詢及關(guān)系運(yùn)算

第三章 關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言 SQL

3.1 SQL 的基本概念,基本表、視圖。

3.2 基本表及視圖的定義、查詢、更新

3.3 數(shù)據(jù)查詢: 常用的 SQL 語(yǔ)句,常用的查詢、修改、刪除、分組、排序等 SQL 語(yǔ)句

3.4 能熟練使用聚集函數(shù)、通配符

3.5 多表連接查詢、復(fù)合條件連接查詢、嵌套查詢

3.6 數(shù)據(jù)更新 插入數(shù)據(jù)、修改數(shù)據(jù)、刪除數(shù)據(jù)

第四章 數(shù)據(jù)庫(kù)安全性

4.1 數(shù)據(jù)庫(kù)的安全性

  • 保護(hù)數(shù)據(jù)庫(kù),以防不合法使用所造成的數(shù)據(jù)泄露,篡改或破壞

4.2 實(shí)現(xiàn)數(shù)據(jù)庫(kù)安全性控制常用的方法和技術(shù)

4.3 掌握用戶、角色的創(chuàng)建及授權(quán)和收回權(quán)限

第五章 數(shù)據(jù)庫(kù)的完整性

5.1 數(shù)據(jù)庫(kù)的完整性

  • 數(shù)據(jù)庫(kù)的正確性和相容性

5.2 實(shí)體完整性、參照完整性、用戶定義完整性

第六章 關(guān)系數(shù)據(jù)理論

6.1 對(duì)函數(shù)依賴、碼、主屬性、非主屬性、外碼等有深入的理解

6.2 掌握關(guān)系模式的基本函數(shù)依賴、關(guān)系模式的候選碼

6.2 掌握規(guī)范化理論,能夠判斷給定關(guān)系模式的規(guī)范化程度

6.3 掌握模式的分解,能夠按要求對(duì)給定關(guān)系模式進(jìn)行分解,修改為符合更高一級(jí)的范式

第七章 數(shù)據(jù)庫(kù)設(shè)計(jì)

7.1 掌握數(shù)據(jù)庫(kù)的一般設(shè)計(jì)過(guò)程及每個(gè)階段的主要任務(wù)。

  • 需求分析:明確用戶對(duì)數(shù)據(jù)庫(kù)的需求
  • 概念結(jié)構(gòu)設(shè)計(jì):設(shè)計(jì)獨(dú)立于具體DBMS的概念模型
  • 邏輯結(jié)構(gòu)設(shè)計(jì):根據(jù)概念模型轉(zhuǎn)換得到具體的DBMS邏輯模型
  • 物理結(jié)構(gòu)設(shè)計(jì):設(shè)計(jì)存儲(chǔ)結(jié)構(gòu)和存儲(chǔ)路徑
  • 數(shù)據(jù)庫(kù)實(shí)施:
  • 數(shù)據(jù)庫(kù)運(yùn)行和維護(hù):

7.2 根據(jù)語(yǔ)義設(shè)計(jì)系統(tǒng)的 E-R 圖,并將 E-R 圖轉(zhuǎn)換為關(guān)系模式(寫出關(guān)系名稱和所有屬性)

7.3 對(duì)數(shù)據(jù)庫(kù)設(shè)計(jì)方面有自己獨(dú)到的理解

  • 【猜測(cè)】可擴(kuò)展性:數(shù)據(jù)庫(kù)模塊化,數(shù)據(jù)庫(kù)模塊可變更的能力

第九章 關(guān)系查詢處理和查詢優(yōu)化

9.1 理解關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)查詢優(yōu)化的主要規(guī)則及步驟

  • 記憶(主要規(guī)則):選擇怎么樣?投影怎么樣?選擇和投影可以怎么樣?選擇和笛卡爾積可以怎么樣?公共子表達(dá)式?連接算法?
  • 記憶(步驟):畫語(yǔ)法樹,優(yōu)化,存取路徑,查詢計(jì)劃

9.2 了解代數(shù)優(yōu)化、物理優(yōu)化

  • 代數(shù)優(yōu)化:對(duì)關(guān)系代數(shù)表達(dá)式的優(yōu)化,按照一定規(guī)則對(duì)關(guān)系代數(shù)表達(dá)式進(jìn)行等價(jià)變換,改變操作的組合及次序,提高查詢效率
  • 物理優(yōu)化:對(duì)存取路徑和底層操作算進(jìn)行優(yōu)化

第十章 數(shù)據(jù)庫(kù)恢復(fù)技術(shù)

10.1 對(duì)事務(wù)的基本概念及事務(wù)的 ACID 特性有一定的理解和掌握

【事務(wù)】

10.2 理解數(shù)據(jù)庫(kù)系統(tǒng)中故障的種類

  • 事務(wù),介質(zhì),系統(tǒng)

10.3 掌握數(shù)據(jù)庫(kù)恢復(fù)技術(shù)(數(shù)據(jù)轉(zhuǎn)儲(chǔ)或數(shù)據(jù)備份、登記日志文件)

10.4 掌握并能熟練使用具有檢查點(diǎn)的恢復(fù)技術(shù)。

  • 【推測(cè)考大題】

第十一章 并發(fā)控制

11.1 并發(fā)控制及并發(fā)操作帶來(lái)的數(shù)據(jù)不一致性

  • 丟失修改,臟讀,不可重復(fù)讀

11.2 封鎖技術(shù)及基本封鎖類型(排他鎖和共享鎖)、三級(jí)封鎖協(xié)議

11.3 活鎖和死鎖,死鎖的預(yù)防、診斷與解除

11.4 可串行化調(diào)度及兩段鎖協(xié)議,判斷一個(gè)并發(fā)調(diào)度是不是沖突可串行化調(diào)度。

【兩段鎖協(xié)議】

11.5 了解封鎖粒度及多粒度封鎖。

http://www.risenshineclean.com/news/46403.html

相關(guān)文章:

  • 手機(jī)端網(wǎng)站推廣營(yíng)銷管理
  • 游戲交易網(wǎng)站怎么做石獅seo
  • 鄭州整形網(wǎng)站建設(shè)上海谷歌seo公司
  • 做金融怎么進(jìn)基金公司網(wǎng)站咖啡的營(yíng)銷推廣軟文
  • 藝術(shù)網(wǎng)站制作北京seo產(chǎn)品
  • linux wordpress 下載文件優(yōu)化網(wǎng)站界面的工具
  • 如何設(shè)計(jì)大型電商網(wǎng)站建設(shè)seo系統(tǒng)
  • 南京酒店網(wǎng)站制作新聞?lì)^條
  • 正版香港免費(fèi)資料手機(jī)網(wǎng)站大全網(wǎng)絡(luò)營(yíng)銷怎么做
  • 做360手機(jī)網(wǎng)站優(yōu)化快女教師遭網(wǎng)課入侵視頻大全集
  • 搭建網(wǎng)站 軟件seo排名優(yōu)化軟件價(jià)格
  • 北京網(wǎng)站建設(shè)東軒seo蘇州百度推廣開戶
  • 做網(wǎng)站除了域名還需要什么網(wǎng)絡(luò)網(wǎng)站推廣
  • 企業(yè)三合一建站公司怎么找免費(fèi)seo排名優(yōu)化
  • 國(guó)外做ppt的網(wǎng)站百度開放云平臺(tái)
  • 申請(qǐng)域名后怎么做網(wǎng)站重慶森林經(jīng)典臺(tái)詞 鳳梨罐頭
  • wordpress 與公眾平臺(tái)廊坊關(guān)鍵詞優(yōu)化報(bào)價(jià)
  • 建站模板怎么選近期國(guó)際熱點(diǎn)大事件
  • vs2010網(wǎng)站開發(fā) SQL武漢seo關(guān)鍵詞排名
  • 云南房產(chǎn)網(wǎng)站建設(shè)自媒體平臺(tái)哪個(gè)收益高
  • 網(wǎng)站搭建與網(wǎng)站建設(shè)論文收錄網(wǎng)站排名
  • 建設(shè)主管部門門戶網(wǎng)站鄭州網(wǎng)站排名優(yōu)化公司
  • 網(wǎng)站服務(wù)器一個(gè)多少錢知名品牌營(yíng)銷策略
  • 內(nèi)涵吧網(wǎng)站西安百度推廣運(yùn)營(yíng)
  • 中國(guó)企業(yè)500強(qiáng)排名一覽表seo技術(shù)平臺(tái)
  • 企業(yè)門戶網(wǎng)站制作一網(wǎng)信息一個(gè)簡(jiǎn)單便捷的新聞網(wǎng)站
  • 上海 網(wǎng)站平臺(tái)開發(fā)互聯(lián)網(wǎng)營(yíng)銷師考試題及答案
  • wordpress數(shù)據(jù)庫(kù)沒有填寫培訓(xùn)行業(yè)seo整站優(yōu)化
  • 長(zhǎng)安網(wǎng)站建設(shè)軟件開發(fā)北京seo關(guān)鍵詞排名優(yōu)化
  • 網(wǎng)站充值平臺(tái)怎么做的推廣平臺(tái)下載