MySql資料庫知識點總結01

2021-09-22 10:15:40 字數 3489 閱讀 1004

資料庫從大的方面可以分為兩大部分,分別為底層的儲存系統也就是檔案系統,和上層的程式例項組成,程式例項有儲存管理、快取管理、日誌管理、許可權管理、容災管理、sql解析、索引、鎖等

程式實:儲存管理、快取管理、日誌管理、許可權管理、容災管理、sql解析、索引、鎖等

儲存:檔案系統

mysql體系結構

mysql外掛程式式的儲存引擎,其中儲存引擎分很多種。只要實現符合mysql儲存引擎的介面,可以開發自己的儲存引擎!

所有跨儲存引擎的功能都是在服務層實現的。

mysql的儲存引擎是針對表的,不是針對庫的。也就是說在乙個資料庫中可以使用不同的儲存引擎。但是不建議這樣做。

悲觀鎖:對資料持一種悲觀的態度,認為在事務執行期間總是有別的事務修改資料,所以每一次操作都加鎖

樂觀鎖:對資料持一種樂觀的態度,所以不加鎖,樂觀鎖中每一項資料都有乙個版本號,在事務提交的時候,通過版本號來看是否是否在事務a期間,事務b修改了資料,比如有兩個事務,事務a先查詢資料,此時資料的版本號為0,事務b查詢版本也為0,當a修改了資料並且版本變為1,在提交是版本號1>0提交成功,此時事務也修改了資料把版本加一變為1,在提交時版本號1不大於1,所以提交被駁回,資料過期

第一正規化:字段不可分,只要是資料庫中存在的表都符合1nf

第二正規化:消除了非主屬性對碼的部分依賴

第三正規化:消除了非主屬性對碼的傳遞依賴

a:原子性----一次事務是資料庫的最小執行單位,要麼事務內的所有操作做完,要麼全不做,事務期間只要有乙個操作不成功,就回滾,回到事務開始之前

c:一致性----事務從乙個一致性狀態轉移到另乙個一致性轉態,比如:賬戶a有100,賬戶b也有100,加起來是200,當a給b轉了50後,a為50,b為150,加起來還是200,感覺有一點能量守恆的意思

i:隔離線----乙個事務的操作在提交之前是對其他不可見的

d:永續性----一旦事務提交資料會被儲存到磁碟永久有效

leftjoin(左聯接) :包含左表的全部資料和右表中聯結字段相等的記錄

rightjoin(右聯接): 返回包括右表中的所有記錄和左表中聯結字段相等的記錄

innerjoin(等值連線): 只返回兩個表中聯結字段相等的行

drop會把乙個表刪掉

delete刪除乙個表的資料,一般配合where使用

truncate清空表中的資料,下一次在插入資料時自增長id從1開始

union 合併兩個查詢結果,把兩個結果做並集並且刪除重複的行,union all不會刪除重複的行

expect 把兩個結果做查,包括所有在 table1 中但不在 table2 中的行並消除所有重複行,expect all不消除重複的行

insert 把兩個結果集做交集 只包括 table1 和 table2 中都有的行並消除所有重複

行而派生出乙個結果表 expect all不消除重複的行

innodb

myisam

mysql預設的引擎,支援行級鎖和表級鎖 ,支援事務

只支援表級鎖,不支援事務

適用大量的insert或update操作

適用大量的select查詢

為什麼myisam會比innodb的查詢速度快?

innodb要快取資料塊,而myisam只需要快取索引快

innodb定址要先對映到資料塊在到資料行,而myisam記錄的直接是資料的ofeset,定位比inoodb塊

innodb還需要維護mvcc一致

髒讀讀取了乙個事務還未提交的資料

不可重複讀

在同乙個事務中兩次讀取的結果不一樣,和幻讀相比更側重資料的修改

幻讀在同乙個事務中兩次讀取的記錄數量不一樣,更偏向於插入操作帶來的不一樣

事務隔離級別

更新丟失

髒讀不可重複讀

幻讀讀未提交 (read uncommitted)×√

√√讀已提交 (read committed)××

√√可重複讀(repeatable read)××

×√序列化(serializable)××

××快照讀和當前讀?

當前讀:加了鎖的增刪改查語句

快照讀:不加鎖的非阻塞讀,快照讀顧名思義會生成快照,在rc(read committed)隔離級別下每一次的select語句都會產生乙個快照,所以會產生幻讀,在rr級別下,select語句執行的時間不同,生成的快照也會不同,如果有個事務的select語句執行的時候另乙個事務還沒提交那麼這個事務就看不到另乙個事務的修改,反之如果乙個事務在另乙個事務提交後執行了select語句那這個事務就可以看到另乙個事務的修改也就是查詢可以看到自己之前已提的所有事務所做的更改,看不到在查詢開始之後的事務提交的更改

快照讀是如何實現的?我們在建立表的時候,除了我們自己指定的一些字段,資料庫會給我們預設加上一些字段,其中db_trx_id就是事務的id,db_roll_ptr就是回滾的指標指向undo log,db_row_id當我們建表時沒有指定主鍵,資料庫就會指定乙個id

下面是快照讀的乙個例子

事務a修改了field2,把12改為32,當修改的時候會把資料複製乙份到undo log中,然後鎖定當前行,db_trx_id變為1,db_roll_ptr指向undo log日誌

另乙個事務b也修改了資料把filed3從13改為45,此時也會把原來的資料拷貝乙份到undo log日誌中,db_trx_id變為2

read view可見性演算法,決定了當前事務可以看見那個版本的資料,read view會把當前的db_trx_id和系統其它的db_trx_id對比,如果比其他大就可以看到

next-key鎖?

mysql在rr隔離級別下實際上是通過next-key鎖避免幻讀的,next-key鎖就是行鎖+gap鎖,gap會把乙個範圍鎖起來,比如乙個表的索引是1,3,5,當執行select * from table where id > 3;就會把》3的範圍鎖起來,當在另乙個事務中插入一條id為4的資料時,就會被阻塞,只有當事務提交以後,另乙個事務才能繼續執行插入語句

01 MySQL資料庫知識點的總結

目錄 一 資料庫的常見操作 進入資料庫 預設的賬號都是root 退出資料庫 查詢資料庫 建立資料庫 顯示資料庫資訊 更改資料庫的字元編碼 刪除資料 選擇資料庫進行操作 二 資料表的常見操作 建立表 檢視所有表 顯示建立表 顯示表結構 刪除表 三 資料的基本操作 插入資料 查詢資料 刪除資料 修改資料...

mysql資料庫知識點總結

mysql屬於關係型資料庫,關係型資料庫是指採用了關係模型來組織資料的資料庫,而關係模型就是指二維 模型,所以,關係型資料庫就是由二維表及其之間的聯絡所組成的乙個資料組織。1.mysql資料庫中常用的概念有 1 高併發讀寫效能低 由於 的使用者併發性高,往往是每秒上萬次的讀寫請求,雖然mysql等關...

MySQL資料庫索引知識點總結

1.mysql資料庫索引都有哪些資料結構 b 和hash 2.聊下hash hash查詢是把key通過hash生成下標然後獲取對應的值,它的主要特點是快速精確查詢,但是不支援範圍查詢。如果要是做成索引,速度是很慢的,要全部掃瞄。3.hash表在那些場景比較適合 等值查詢的場景,就只有kv key,v...