插入的数据不能时时查询到_数据库原理笔记
生活随笔
收集整理的這篇文章主要介紹了
插入的数据不能时时查询到_数据库原理笔记
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
轉(zhuǎn)載自:https://zhuanlan.zhihu.com/c_1236597039825223680
數(shù)據(jù)庫系統(tǒng)的基本概念
- 數(shù)據(jù):描述事物的符號記錄
- 數(shù)據(jù)庫(DB):長期存儲在計算機內(nèi),有組織,可共享的大數(shù)據(jù)集合
- 數(shù)據(jù)庫數(shù)據(jù)特性:永久存儲,有組織,可共享
- 數(shù)據(jù)庫管理系統(tǒng)(DBMS):數(shù)據(jù)庫加一組用以訪問,更新,管理這些數(shù)據(jù)的程序
- 數(shù)據(jù)庫系統(tǒng)(DBS):由DB,DBMS,應(yīng)用程序和數(shù)據(jù)庫管理員組成的存儲,管理,處理和維護(hù)數(shù)據(jù)的系統(tǒng)
- DBMS的功能:數(shù)據(jù)定義;數(shù)據(jù)組織,存儲和管理;數(shù)據(jù)操縱;數(shù)據(jù)庫的事務(wù)管理和維護(hù)功能等
- DBMS的特性:
- 數(shù)據(jù)訪問的高效和可擴(kuò)展性
- 縮短應(yīng)用開發(fā)時間
- 數(shù)據(jù)獨立性
- 數(shù)據(jù)完整性和安全性
- 并發(fā)訪問和魯棒性
- 數(shù)據(jù)庫系統(tǒng)(DBS)的特點
- 數(shù)據(jù)結(jié)構(gòu)化
- 數(shù)據(jù)的共享性高,冗余度低,易擴(kuò)充
- 數(shù)據(jù)獨立性高
- 數(shù)據(jù)有DBMS統(tǒng)一管理和控制
- 數(shù)據(jù)庫與文件處理系統(tǒng)對比
- 優(yōu)點:文件處理系統(tǒng)由傳統(tǒng)操作系統(tǒng)所支持,數(shù)據(jù)文件可以是不同的格式,數(shù)據(jù)文件是相互獨立的
- 缺點:數(shù)據(jù)冗余和不一致,數(shù)據(jù)訪問困難,數(shù)據(jù)孤立,完整性問題,原子性問題,并發(fā)訪問異常,安全性問題
- 開源數(shù)據(jù)庫系統(tǒng):MySQL,PostgreSQL
- 數(shù)據(jù)管理技術(shù)發(fā)展:人工管理階段,文件系統(tǒng)階段,數(shù)據(jù)庫系統(tǒng)階段
數(shù)據(jù)庫模式及數(shù)據(jù)類型
- 數(shù)據(jù)抽象:物理層,邏輯層(數(shù)據(jù)庫存儲什么數(shù)據(jù)及其數(shù)據(jù)之間的關(guān)系),視圖層
- 實例和模式:類似編程語言中的變量和類型;模式:數(shù)據(jù)庫的總體設(shè)計;實例:特定時刻存儲在數(shù)據(jù)庫中的信息的集合
- 數(shù)據(jù)模型:是對現(xiàn)實世界數(shù)據(jù)特征的抽象
- 兩類數(shù)據(jù)模型:
- 概念(信息)模型:按照用戶的觀點來對數(shù)據(jù)和信息建模
- 邏輯模型:包括層次模型,網(wǎng)狀模型,關(guān)系模型,面向?qū)ο竽P?#xff0c;對象關(guān)系數(shù)據(jù)模型等,按照計算機系統(tǒng)的觀點對數(shù)據(jù)建模
- 現(xiàn)實世界--->信息世界--->機器世界
- 概念模型:
- 基本概念:
- 實體
- 屬性
- 碼:唯一標(biāo)識實體的屬性集
- 實體型:不是具體數(shù)據(jù),像c++中的類
- 實體集
- 域:屬性的取值范圍
- 聯(lián)系
- 概念模型的表示方法:實體-聯(lián)系方法,用E-R圖來描述現(xiàn)實世界的概念模型,也稱E-R模型
- 數(shù)據(jù)模型的組成要素:數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)操作,數(shù)據(jù)的完整性約束條件
- 基本概念:
- 層次模型
- 數(shù)據(jù)結(jié)構(gòu):只有一個根節(jié)點,其余節(jié)點只有一個雙親結(jié)點
- 數(shù)據(jù)操縱:查詢,插入,刪除和更新
- 網(wǎng)狀模型
- 典型代表:DBTG系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu):一個結(jié)點可以有多余一個的雙親,允許一個以上的結(jié)點無雙親
- 關(guān)系模型
- 關(guān)系:一張二維表
- 元組:表中的一行
- 屬性:表中的一列
- 碼:表中的屬性組,可以唯一確定一個元組
- 域:具有相同數(shù)據(jù)類型的值的集合
- 關(guān)系模式:關(guān)系名(屬性1,屬性2,......)
- 注意:不允許表中有表的情況出現(xiàn);所有數(shù)據(jù)結(jié)構(gòu)在數(shù)據(jù)庫中存儲為二維表
- 數(shù)據(jù)庫設(shè)計步驟:需求分析,概念數(shù)據(jù)庫設(shè)計,邏輯數(shù)據(jù)庫設(shè)計,結(jié)構(gòu)優(yōu)化,物理數(shù)據(jù)庫設(shè)計和創(chuàng)建并初始化數(shù)據(jù)庫&安全設(shè)計
數(shù)據(jù)庫系統(tǒng)的結(jié)構(gòu)
- 模式:數(shù)據(jù)庫中全體數(shù)據(jù)邏輯結(jié)構(gòu)和特征的描述
- 實例:模式的一個具體的值
- 數(shù)據(jù)庫的三級模式結(jié)構(gòu):外模式,模式,內(nèi)模式
- 外模式:也稱子模式或用戶模式,是應(yīng)用程序員和最終用戶使用的局部數(shù)據(jù)的邏輯結(jié)構(gòu)和特征的描述
- 內(nèi)模式:也稱存儲模式,是數(shù)據(jù)物理結(jié)構(gòu)和存儲方式的描述
關(guān)系數(shù)據(jù)庫
關(guān)系數(shù)據(jù)結(jié)構(gòu)及形式化定義
- 關(guān)系模型是建立在集合代數(shù)的基礎(chǔ)上的
- 域:一組具有相同數(shù)據(jù)類型的值的集合
- 笛卡爾積:是在域上的一種運算
- 關(guān)系:關(guān)系是笛卡爾積的有限子集,是一張二維表,每行對應(yīng)元組,每列對應(yīng)屬性
- 碼(鍵):如果一個屬性能夠唯一的標(biāo)志一個元組,則這個屬性就是一個碼
- 候選碼:如果一個碼就是最小超碼,將它稱為候選碼
- 主碼:當(dāng)有多個候選碼時,選定一個為主碼,由用戶明確定義,通常用下劃線表示
- 外碼:表B的主鍵出現(xiàn)在了表A中,這個主鍵稱為表A的外碼
- 參照關(guān)系:表A
- 被參照關(guān)系(目標(biāo)關(guān)系):表B
- 全碼:關(guān)系模式的所有屬性都是這個關(guān)系模式的候選碼 53
- 關(guān)系的三種類型:基本關(guān)系,查詢表和視圖表
- 在關(guān)系數(shù)據(jù)庫中,關(guān)系是型,關(guān)系是值
關(guān)系操作
- 關(guān)系模型的基本操作:查詢,插入,刪除和修改
- 關(guān)系數(shù)據(jù)模型操作方式稱為一次一集合方式,非關(guān)系數(shù)據(jù)模型的數(shù)據(jù)操作方式稱為一次一記錄的方式
- 關(guān)系數(shù)據(jù)語言的分類:關(guān)系代數(shù)和關(guān)系演算
- SQL:介于關(guān)系代數(shù)和關(guān)系演算之間的結(jié)構(gòu)化查詢語言,是關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)語言
關(guān)系的完整性
- 關(guān)系模型的三類完整性約束:實體完整性,參照完整性,用戶定義完整性
- 實體完整性
- 實體完整性規(guī)則:若屬性A是基本關(guān)系R的主屬性,則A不能取空值
- 參照完整性
- 參照關(guān)系和被參照關(guān)系
- 參照完整性規(guī)則:學(xué)生的專業(yè)號只能取空值和非空值(必須是已有的某個專業(yè))
- 用戶定義完整性
- 由用戶根據(jù)實際情況來加約束條件
關(guān)系代數(shù)
- 關(guān)系代數(shù):是一種抽象的查詢語言,用對關(guān)系的運算來表達(dá)查詢
- 運算三要素:運算對象,運算符,運算結(jié)果
- 關(guān)系運算:選擇,投影,連接,除運算等
- 選擇:根據(jù)條件選擇出符合的元組
- 投影:根據(jù)需求提出所需的屬性,刪除其他屬性,對表來說是按列操作
- 合并:根據(jù)需求合并所需的屬性 連接操作的條件:兩個關(guān)系的屬性數(shù)目要相同,且元組是同一個類型(不能把int和string進(jìn)行連接)
- 差:在關(guān)系A(chǔ)中去除關(guān)系B出現(xiàn)的屬性 差運算操作的條件和連接操作一樣
- 笛卡爾積:將關(guān)系A(chǔ)和關(guān)系B進(jìn)行笛卡爾積之后組成一個新關(guān)系
- 復(fù)合:將上述操作進(jìn)行復(fù)合運算
- 更名:對關(guān)系表達(dá)式或者關(guān)系的屬性重命名
----------------------------------------附加運算---------------------------------------
- 交:兩關(guān)系的公共部分
- (theta)連接:從兩個關(guān)系的笛卡爾積中選取滿足條件的元組,條件由用戶自己指定
- 自然連接
- 自然連接操作的條件:兩關(guān)系必須含有同名同域?qū)傩?#xff0c;連接兩關(guān)系中同名屬性值相等的元組,運算結(jié)果是兩個屬性集的并集,但要消去重名屬性
- 懸浮元組:在自然連接中被舍棄的元組
- 外連接:將懸浮元組加上,保留左邊的叫左外連接,保留右邊的叫右外連接
- 除運算:關(guān)系A(chǔ)除以關(guān)系B得到關(guān)系C,則關(guān)系C中包含所有在A中不在B中的屬性及其值,且B,C的元組組合均在A中
關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言SQL
SQL概述
- SQL特點:綜合統(tǒng)一,高度非過程化,面向集合的操作方式,以同一種語法結(jié)構(gòu)提供多種使用方式
- 視圖是從基本表里面導(dǎo)出的表,是一個虛表,用戶可以在視圖上再定義視圖
索引的建立和刪除
- 目的:加快查詢速度
- 具體實現(xiàn)技術(shù)由DBMS來決定
- 索引可以是:唯一索引,非唯一索引,聚簇索引(前面兩個又稱普通索引)
- 在下圖中,我們使用普通索引索引來查詢,紅線下方為數(shù)據(jù)表,上方類似B+樹;使用索引之后,用四個文件塊就可以讀取到數(shù)據(jù),否則只能遍歷
- 聚簇索引要求數(shù)據(jù)按照屬性來順序存儲,極大加快了按照聚簇值存儲的數(shù)據(jù)的查詢速度
- 一個關(guān)系只能有一個聚簇索引,可以有多個普通索引
數(shù)據(jù)查詢
- 一個查詢塊結(jié)束用;結(jié)尾
- 查詢所有屬性列用*
- 單表查詢:SELECT FROM WHERE;
- 前面三個關(guān)鍵字為在原表操作
- 聚集函數(shù)不可以在WHERE語句中出現(xiàn)
- HAVING短語與WHERE子句的區(qū)別
- HAVING短語:作用于組,從組中選擇滿足條件的組
- WHERE子句:作用于基表或視圖,從中選擇滿足條件的元組,因此不能用聚集函數(shù)
- HAVING短語與GROUP BY短語順序問題:GROUP BY不能放在HAVING短語中,因為HAVING短語是先要分組,再選擇,因此要先用GROUP BY分組,所以將其放在HAVING短語前面
- 連接查詢:
- 連接操作的執(zhí)行過程:
- 嵌套循環(huán)法
- 排序合并法
- 索引連接法
- 連接查詢:
- 等值連接和非等值連接查詢
- 自身連接
- 外連接
- 多表連接
- 連接操作的執(zhí)行過程:
- 嵌套查詢:
- 將一個查詢塊嵌入到另一個查詢塊的WHERE或者HAVING語句中
- 內(nèi)層向外層傳播
- 連接查詢和嵌套查詢的速度根據(jù)不同的系統(tǒng)有不同的速度
- 不能用ORDER BY子句
- 嵌套查詢求解方法:
- 不想關(guān)子查詢
- 相關(guān)子查詢
- 帶有IN謂詞的子查詢
- 帶有比較運算符的子查詢
- 帶有ANY(SOME)或者ALL謂詞的子查詢
- 帶有EXISTS謂詞的子查詢
- 只產(chǎn)生邏輯真或假,因此列名無意義,使用*
數(shù)據(jù)更新
- 插入數(shù)據(jù)
- 插入元組
- 插入子查詢結(jié)果
- 修改數(shù)據(jù)
- 在MySQL中使用讓全體學(xué)生年齡+1的語句時候,提示安全更新問題?
- 刪除數(shù)據(jù)
空值
- 表示不存在,無意義
視圖
- 虛表,是一個或幾個基本表導(dǎo)出的表
- 定義視圖
- 查詢視圖
- 更新視圖
- 視圖的作用
- 簡化用戶的操作
- 對機密數(shù)據(jù)提供安全保護(hù)
- 更加清晰的表達(dá)查詢
數(shù)據(jù)庫設(shè)計與應(yīng)用開發(fā)
- 具體知識網(wǎng)絡(luò)如下
- 第四章和第五章作為理解內(nèi)容,之后看情況補充
問題的提出
- 關(guān)系數(shù)據(jù)庫的邏輯設(shè)計
- 數(shù)據(jù)依賴
- 數(shù)據(jù)依賴是完整性約束的表現(xiàn)形式,數(shù)據(jù)內(nèi)在的聯(lián)系
- 數(shù)據(jù)依賴類型
- 函數(shù)依賴
- 多值依賴
- 數(shù)據(jù)依賴對關(guān)系模式的影響
- 關(guān)系模式中的問題
- 數(shù)據(jù)冗余太大(次要)
- 更新異常:例如新插入剛成立的系,系里面沒有主任,因此不能確定系主任
- 插入異常
- 刪除異常
- 通過分解關(guān)系模式來消除其中不適合的數(shù)據(jù)依賴
規(guī)范化(范式)
- 用規(guī)范化看關(guān)系模式好壞與否
- 函數(shù)依賴
- 定義:在X中一個行給一個a,能確定一個y,在另一個行中a仍能確定y,記作X—>Y
- 函數(shù)依賴來源于現(xiàn)實世界,可能會多加約束條件
- 函數(shù)依賴分類★
- 非平凡函數(shù)依賴和平凡函數(shù)依賴
- 完全函數(shù)依賴與部分函數(shù)依賴★
- 傳遞函數(shù)依賴★
- 碼
- 定義:設(shè)K為R<U,F>中的屬性或?qū)傩越M合。若K完全依賴U, 則K稱為R的侯選碼
- 主屬性:候選碼中的屬性
- 非主屬性:非候選碼中的屬性
- 全碼:整個屬性組是碼
- 外碼
- 范式★
- 范式是一個標(biāo)準(zhǔn),符合某一級別的關(guān)系模式的集合
- 范式種類
- 范式基礎(chǔ):函數(shù)依賴
- 使用范式步驟:確定碼,確定主屬性和非主屬性,確定函數(shù)依賴
- 各種范式之間的聯(lián)系:
- 規(guī)范化:一個低一級范式的關(guān)系模式,通過模式分解可以轉(zhuǎn)換為若干個高一級范式的關(guān)系模式的集合
- 1NF★
- 定義:如果一個關(guān)系模式R的所有屬性都是不可分的基本數(shù)據(jù)項,則R∈1NF
- 關(guān)系數(shù)據(jù)庫必須滿足1NF
- 2NF★
- 定義:若R∈1NF,且每一個非主屬性完全函數(shù)依賴于碼,則R∈2NF
- 有單碼的關(guān)系模式一定滿足第二范式
- 在分解的若干個關(guān)系模式中必須保證有公共屬性
- 2NF并不能完全消除關(guān)系模式數(shù)據(jù)冗余和異常
- 3NF★
- 定義:在2NF基礎(chǔ)上非主屬性不能有傳遞依賴,則R∈3NF
- 3NF并不能完全消除關(guān)系模式數(shù)據(jù)冗余和異常
- BCNF★
- 定義:在3NF基礎(chǔ)上一個關(guān)系依賴?yán)锩婷恳粋€決定因素都包含碼,即沒有其他決定因素
- 實際中很難到達(dá)BC范式,已經(jīng)解決了操作異常問題
- BCNF實際上是對第三范式的修正和補充
- 4NF(了解性)
- 第四范式是多值依賴的問題,函數(shù)依賴的問題之前已經(jīng)解決
- 4NF之前是函數(shù)范式范疇,4NF是多值依賴范疇
- 多值依賴
- 有數(shù)據(jù)冗余問題的時候,對數(shù)據(jù)操作訪問的元組比較多
- 定義:對于給定的(X,Y)值,決定的Z的值僅僅與X有關(guān),而與Y無關(guān)
- 多值依賴分類
- 平凡多值依賴:Z為空集,平凡多值依賴無意義
- 非平凡多值依賴
- 多值依賴是對三個屬性的操作
- 多值依賴具有對稱性,傳遞性
- 函數(shù)依賴是多值依賴的特殊情況
- 多值依賴導(dǎo)致數(shù)據(jù)冗余
- 4NF定義:不能有非平凡且非函數(shù)依賴的多值依賴,允許的是左部必須包含碼的函數(shù)依賴
規(guī)范化小結(jié)
- 規(guī)范化是數(shù)據(jù)庫邏輯設(shè)計的工具
- 目的是盡量消除操作異常和冗余
數(shù)據(jù)依賴的公理系統(tǒng)
- 公理系統(tǒng)是模式分解的基礎(chǔ)
- Armstrong公理系統(tǒng)(找到推出結(jié)果的感覺就ok,沒必要死記)
- 自反律:X確定他自己的一部分
- 增廣律
- 傳遞律
- 合并規(guī)則
- 偽傳遞規(guī)則
- 分解規(guī)則
- 閉包(不可求):在關(guān)系模式R<U,F>中,F所蘊含的函數(shù)依賴全體,記作F+
- 屬性集閉包(可求):在給定F+的情況下,去求X可以確定哪些屬性
- 關(guān)于閉包的引理:
- 求屬性集閉包的算法
- 最小依賴集(Fm)
- 為模式分解做準(zhǔn)備
- 右部為單屬性
- 沒有多余的函數(shù)依賴
- 決定因素沒有多余的屬性(XB->Y,X->Y;B就是多余的)
- 極小化過程:求最小依賴集
- 逐一檢查右部是否為單屬性,若不是,則拆開
- 逐一檢查各個函數(shù)依賴,若該依賴可以由其他推出,若有,去除該函數(shù)依賴
- 去掉多余屬性
模式的分解
- 模式分解理論基礎(chǔ)
- 希望分解后能繼續(xù)攜帶完整信息
- 希望函數(shù)依賴集合依賴數(shù)量比較少
- 希望獲得一個可以反映所有需求的最小函數(shù)依賴集合
- 三種模式分解等價的定義
- 無損連接性
- 關(guān)系模式R<U,F>被分解為若干模式,R與R1,R2,R3,......,Rn自然連接結(jié)果相等,則稱具有無損連接性
- 不一定能解決數(shù)據(jù)操作異常問題
- 保持函數(shù)依賴
- 關(guān)系模式R<U,F>被分解為若干模式,F所邏輯蘊含的函數(shù)依賴一定可以由分解得到的某個關(guān)系模式中的函數(shù)依賴Fi所邏輯蘊含,則稱保持函數(shù)依賴
- 無損連接性和保持函數(shù)依賴
- 無損連接性
- 舉例:
- 分解算法
- 算法6.2
- 判斷分解的無損連接性
- 舉例:判斷分解ρ={AB,AE,EC,DBC,AC}是否具有無損連接性?
- 算法6.2
- 第一步:構(gòu)建一張表,N行為模式分解之后變成了多少關(guān)系就有多少行,K列為原關(guān)系的所有屬性;接著將表中元素填滿。比如對于第一行AB來說,用到了第一列和第二列屬性,所以就填a1,a2,沒用到就填b13等(1,3表示行和列)
- 第二步:根據(jù)函數(shù)依賴關(guān)系改變表中元素的值。比如對于第一個函數(shù)依賴A->D,找到A列中元素一樣的行(至少兩個才有意義),由于依賴關(guān)系,我們需要修改D列上的元素,如果元素全為b,將其下標(biāo)行號修改為最小行號;如果元素中有a,將所有行全改為a
- 第三步:遍歷完所有的函數(shù)依賴,判斷假如有一行全為a,則說明分解保持無損連接性,否則再遍歷
- 快速方法:完全不考慮b和下標(biāo),對于每個行來說,哪一個屬性被使用,就在該行填a;再根據(jù)函數(shù)依賴在其他列填a,比如A確定D,就在D列填a
- 算法6.3(※)
- 轉(zhuǎn)化為3NF的保持函數(shù)依賴的分解
- 第一步:求最小函數(shù)依賴集Fm
- 第二步:將沒有在函數(shù)依賴集中出現(xiàn)的屬性去掉,其余的不變組成U0
- 第三步:按照完全相同的左部,對函數(shù)依賴集進(jìn)行分組,判斷一下分完組的屬性有沒有重復(fù)的情況,比如:BCD包含BD,去掉重復(fù)的部分,算法結(jié)束
- 算法6.4(※)
- 轉(zhuǎn)換為3NF既有無損連接性又保持函數(shù)依賴的分解
- 第一步:按照算法6.3分解之后的關(guān)系并上原來關(guān)系的碼,比如ρUR*
- 第二步:判斷合并之后的關(guān)系里面有沒有重復(fù)或者包含的屬性,有的話就去掉,和算法6.3去重相似
- 算法6.3(※)
轉(zhuǎn)載自:https://zhuanlan.zhihu.com/c_1236597039825223680
總結(jié)
以上是生活随笔為你收集整理的插入的数据不能时时查询到_数据库原理笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux函数库破坏怎么办
- 下一篇: tcp假连接_总结的23 个 TCP高频