事務(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。