mysql資料庫概念 Mysql及資料庫的基礎概念

2021-10-17 15:14:28 字數 3991 閱讀 3927

dbms:資料庫管理系統層次模型

網狀模型

關係模型

rdbms:關係型資料庫管理系統

檔案儲存:資料的冗餘和不一致性難以解決

當資料量很大時,檔案儲存的訪問很困難

當資料在不同的檔案時,可能會造成資料的格式不一致,及資料太過於分散造成資料孤立

資料的完整性問題(如兩個銀行之間轉錢過程**現故障,要保證總額一致)

併發訪問異常(如多人同時訪問乙個檔案時,乙個人在進行修改操作,其他人就不能訪問)

原子性問題(資料從乙個穩定狀態轉移到另乙個狀態)

安全性也得不到保障

1.表示層:檔案或者表

2.邏輯層:檔案系統或者儲存引擎

負責將底層的資料塊抽象為檔案供使用者檢視;而在儲存資料時要靠檔案系統將資料解構為物理層的資料(即完成從表示層到物理層的對映)

3.物理層:資料塊,元資料

儲存引擎:可以將檔案系統理解文儲存引擎,將不同的格式的資料轉換為表示層的檔案,還能將檔案儲存為物理資料。這兩個過程的完成都要由儲存引擎來完成

關係:可以將關係理解為一張表

屬性:表中每乙個列描述乙個屬性

實體:表中的每一行為乙個實體(記錄)

而整個表就是同一類實體的集合

e-r關係模型(即實體關係模型):將乙個表拆分為多個表(實體),降低資料的冗餘度

能夠實現儲存在關係型資料庫中的關係模型有四種:

關係模型(結構化的資料模型):它的每個欄位都是有相同屬性的,如第一列為name,第二列為passwd

1.關係模型:靠一張二維表儲存資料,

2.實體關係型:將表拆分成多個不同的實體,讓實體之間通過不同的約束建立聯絡

3.物件關係型模型:基於物件的資料型別

4.半結構化資料模型:在同乙個表中每一行表示的資料可能不一樣;如

name:age:gender

name:uid:birthdate

半結構化資料模型:在儲存時既要把資料儲存下來還要把資料定義的結構儲存下來,以xml(擴充套件標記語言)格式進行儲存

jerry

gender:

而現在大多數的商業或者開源的關係型資料管理系統都能有效的處理以上四種資料模型

關係:代數運算(如求交集、並集、補集等等)

約束:如填入乙個230的年齡資料庫必須要能檢測出來

域約束:資料型別約束,如必須填入int,填入char錯誤

外來鍵約束:引用完整性約束。乙個表中的字段必須與另乙個表中的字段相同並且其值要一一對應

主鍵約束:某欄位(或多個字段組合)能唯一標識此行的實體

注:任意兩個實體在主鍵上不能出現相同值,並且不能為空

如/etc/passwd 中的uid不同則可以作為主鍵、name不同也可以作為主鍵

唯一性約束:沒一行的某字段都不允許出現相同的值,可以為空,且可以有多個

注:所以乙個表中只能有乙個主鍵約束,但可以有多個唯一性約束

檢查性約束:如age<100,age>0

注:mysql對檢查性約束支援不強,但sql—server和oracle支援較好

資料庫語言:

sql(structure query language):結構化查詢語言

dml:資料操作語言(增、刪、查、改)insert、delete、select、update

ddl:資料定義語言

定義rdb(資料庫物件):庫、表、索引、檢視、使用者。儲存過程、儲存函式、觸發器、事件排程器

crete、drop、alter

dcl:資料控制語言,用來定義資料庫中使用者的訪問許可權

查詢管理器功能:負責接收使用者的查詢、理解使用者查詢、並將使用者的查詢轉換為對應的儲存管理器可以理解的語言、並且要能夠將資料在磁碟上儲存或者刪除

查詢管理器元件:

dml直譯器

ddl直譯器

查詢執行引擎

儲存管理器元件:

許可權及完整性管理器

事務管理器(保證事務的完整性、原子性等)

檔案管理器

緩衝區管理器(資料查詢儲存要先將資料快取再記憶體中,緩衝區管理器用來管理快取空間,如快取哪些資料)

mysql:單程序多執行緒模型

一般來說mysql會為每個使用者的請求生成乙個執行緒進行請求的響應,意味著乙個使用者的所有操作(增、刪、查、改等)都在同乙個執行緒中完成

mysql的執行緒分為:守護執行緒、應用執行緒

注:通常來說每個查詢請求都要消耗大量的記憶體(如乙個大的查詢可能要涉及到1g的資料量都有可能,而在32位系統上乙個程序最多只能使用2.7g的記憶體),所以mysql的併發能力並不是想象中的那麼大。所以在乙個集群中資料庫伺服器可能會是整個系統中最慢的乙個節點,因此要盡量避免與資料庫的互動操作

那麼如何避免與資料庫的互動或者提高資料庫伺服器的效能?

1.將第一次查詢的結果儲存在快取伺服器中(varnish、memcache),當以後有相同的查詢請求時直接在快取伺服器中找

2.執行緒復用:如discuz論壇同乙個使用者可能會每隔一段時間發乙個帖子,而每次發帖對資料庫伺服器來說都是乙個新的請求,每次都要建立刪除執行緒太麻煩,可以將執行緒實現多次利用

3.使用效能好的伺服器且os為64位

且mysql對smp(對稱多處理器)架構的cpu支援很差,mysql可以將多個查詢在不同cpu上處理,但不能講乙個大的查詢分開在多個cpu上同時執行,即乙個單獨語句只能在乙個cpu上執行,這是mysql不如orcale的乙個很重要的原因(即擴充套件性不行),但是可以將每個mysql的功能做的簡單點,乙個伺服器只處理一點功能,做乙個mysql集群,這樣可以有效解決這個問題

關係運算:投影 只輸出某個字段或者某個屬性

選擇 只輸出符合條件的行

自然選擇 在兩張表的對應字段通過等值關係建立的連線叫做自然連線

表1a1

b2c1

d3表21bash

2csh

3zsh

4ksh

5tcsh

自然連線後a11bash

b11bash

c33zsh

d22csh

4.笛卡爾乘積

(a+b)*(c+d)=ac+ad+bc+bd

表1中每行與表2中每行分別連線=4*5=20行

通常笛卡爾乘積查詢很慢,應盡量避免

5.並表1中一行 + 表2中一行 ==新的一行

mysql的結構組成

表管理器:負責建立、讀取或修改表定義檔案;維護表描述符快取記憶體;管理表鎖;

表結構定義檔案

表修改模組:表建立、刪除、重新命名、移除、更新或插入之類的操作;

緩衝區管理器:有快取置換策略,一般來說記憶體遠遠小於disk,所以當操作涉及的資料量大於記憶體時,緩衝區管理器要按照快取策略(如最近最少使用策略)進行資料塊的載入,移除等操作

資料在磁碟上的儲存:磁碟為塊型裝置,資料以塊(block)為但為單位進行儲存,在進行資料的讀取(i/o操作)時也只能以塊為單位進行操作;而不能像字元型裝置那樣直接進行按需求讀取所需的字元

而乙個塊中往往儲存著多個行(如果資料不是很大),如果將其中的某個行刪除,長時間下來會差生大量的資料縫隙,進而導致儲存空間的浪費,那麼如何利於資料縫隙?

每個塊都有乙個塊頭,一般有儲存引擎進行資料塊的管理,塊頭裡面記錄了儲存有多少行,即**是空白的,從而塊頭可以方便的對磁碟進行資料整理,進而避免碎片的產生

塊頭(記錄了此塊中儲存多少行,哪些未儲存)

縫隙(刪除導致的)

資料1縫隙

資料2資料的記錄組織:堆檔案組織,資料可以儲存在檔案中的任意乙個位置;有利於儲存,不利於查詢

順序檔案組織,資料按照「搜尋碼」進行順序儲存;不利於儲存,每次資料更新要重新排序,但有利於查詢

雜湊檔案儲存,資料的某個字段進行雜湊運算(hash運算,如取餘)然後根據不同的結果儲存在不同的桶中

指標儲存,每行資料在儲存時還要記錄下一行的指標,這樣就不用按照順序進行儲存

表空間:將多個表的資料存放在同乙個表空間中,標空間相當於乙個更高階的資料儲存空間

資料字典:表、檢視等關係的元資料;如關係的名字、欄位名稱、字段型別、字段長度、使用者名字、授權、密碼等

Mysql資料庫基礎概念

1.什麼是資料庫?資料庫 database 是儲存資料的倉庫,高效的儲存和處理資料的介質 磁碟和記憶體 2.資料庫分類 基於介質分類 資料庫分為關係型資料庫 sql 和非關係型資料庫 nosql 關係型資料庫又分為大型資料庫 oracle,db2 和中型資料庫 sql,mysql 小型資料庫 acc...

MySQL資料庫相關概念

db 資料庫 database 儲存資料的 倉庫 儲存一系列有組織的資料。dbms 資料庫管理系統 database manager system 資料庫是通過dbms建立和操作的容器。mysql oracle db 2 處理海量資料 sqlserver 只能在windows下執行 sql 結構化查...

MySQL資料庫的概念

學習資料庫的一些知識。寫寫部落格方便梳理以及鞏固知識。關於什麼是資料庫就舉乙個樣例來說明,說的可能不夠準確,僅僅要明確乙個大概的意思就夠了。深刻的學習還是要去看書的。講講生活中有關資料的樣例 在乙個中學,記錄學生的基本資訊,記錄什麼呢?記錄學生的姓名 年齡 故鄉。傳統的方法是在一張紙上畫 見以下 然...