數(shù)據(jù)庫知識(shí)總結(jié)

事務(wù)特性 ACID

原子性能保證一個(gè)事務(wù)完全執(zhí)行或完全不執(zhí)行,隔離性能保證事務(wù)并發(fā)執(zhí)行不出錯(cuò),持久性能保證寫入的數(shù)據(jù)都是有效的,他們?nèi)齻€(gè)可以保證一致性

其中事務(wù)的隔離性與隔離級(jí)別是為了保證并發(fā)執(zhí)行時(shí)不出異常,并發(fā)執(zhí)行可能出現(xiàn)的異常有 臟寫(一個(gè)事務(wù)修改的另一個(gè)未提交事務(wù)修改過的數(shù)據(jù)) 臟讀(讀到未提交事務(wù)寫入的數(shù)據(jù)) 不可重復(fù)讀(一個(gè)事務(wù)修改了另一個(gè)事務(wù)讀取的數(shù)據(jù)) 幻讀(一個(gè)事務(wù)根據(jù)篩選條件選出一些記錄,事務(wù)未提交時(shí),另一個(gè)事務(wù)寫入了一些符合條件的記錄),Mysql 默認(rèn)隔離級(jí)別 REPEATABLE READ 即可防止前三種情況不會(huì)出現(xiàn),幻讀可能發(fā)生。

鎖與MVCC

Mysql為了實(shí)現(xiàn)事務(wù)的隔離性,使用了鎖與MVCC這兩種機(jī)制,寫-寫的情況下會(huì)使用鎖,讀-寫 寫-讀的情況下會(huì)使用MVCC,其中鎖還分為行鎖和表鎖(InnoDB只有在通過索引條件檢索數(shù)據(jù)時(shí)使用行級(jí)鎖,否則使用表鎖。InnoDB的行鎖是針對索引加的鎖,不是針對記錄加的鎖。并且該索引不能失效,否則都會(huì)從行鎖升級(jí)為表鎖)

索引

最左前綴匹配原則,非常重要的原則,mysql會(huì)一直向右匹配直到遇到范圍查詢(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)順序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引則都可以用到,a,b,d的順序可以任意調(diào)整。
非聚簇索引
表數(shù)據(jù)和索引是分成兩部分存儲(chǔ)的,主鍵索引和二級(jí)索引存儲(chǔ)上沒有任何區(qū)別
聚簇索引
表數(shù)據(jù)是和主鍵一起存儲(chǔ)的,主鍵索引的葉結(jié)點(diǎn)存儲(chǔ)行數(shù)據(jù)(包含了主鍵值),二級(jí)索引的葉結(jié)點(diǎn)存儲(chǔ)行的主鍵值
InnoDB 主鍵使用的是聚簇索引,MyISAM 不管是主鍵索引,還是二級(jí)索引使用的都是非聚簇索引。

redo undo binlog 日志

redo 日志記錄歷史操作,保證不會(huì)發(fā)生內(nèi)存失效導(dǎo)致已提交的事物寫不到磁盤上的情況,如果每次都刷磁盤成本過高,所以會(huì)有操作記錄日志
undo 日志記錄每次操作需要回滾的內(nèi)容,用于異常時(shí)回滾,比如:在插入一條記錄時(shí),至少要把這條記錄的主鍵值記下來,在刪除一條記錄時(shí),至少要把這條記錄中的內(nèi)容都記下來
binlog 日志 MySQL 重要 log,二進(jìn)制日志文件,記錄所有 DDL 和 DML 語句(除select),事件形式記錄,包含語句所執(zhí)行的消耗時(shí)間,事務(wù)安全型。

spring事務(wù)傳播

默認(rèn) REQUIRED:如果當(dāng)前沒有事務(wù),則自己新建一個(gè)事務(wù),如果當(dāng)前存在事務(wù),則加入這個(gè)事務(wù)
SUPPORTS:當(dāng)前存在事務(wù),則加入當(dāng)前事務(wù),如果當(dāng)前沒有事務(wù),就以非事務(wù)方法執(zhí)行
MANDATORY:當(dāng)前存在事務(wù),則加入當(dāng)前事務(wù),如果當(dāng)前事務(wù)不存在,則拋出異常。
REQUIRES_NEW:創(chuàng)建一個(gè)新事務(wù),如果存在當(dāng)前事務(wù),則掛起該事務(wù)。
NOT_SUPPORTED:始終以非事務(wù)方式執(zhí)行,如果當(dāng)前存在事務(wù),則掛起當(dāng)前事務(wù)。
NEVER:不使用事務(wù),如果當(dāng)前事務(wù)存在,則拋出異常。
NESTED:如果當(dāng)前事務(wù)存在,則在嵌套事務(wù)中執(zhí)行,否則REQUIRED的操作一樣(開啟一個(gè)事務(wù))。

其他知識(shí)

DDL(數(shù)據(jù)庫定義語言),主要命令有create、alter、drop等。DDL主要定義或改變表table的結(jié)構(gòu)、數(shù)據(jù)類型。建表時(shí)使用。
MDL(數(shù)據(jù)操縱語言),主要命令有select、update、insert、delete。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容