什么是事務(wù)?
事務(wù)就是transaction
我們可以用四個(gè)方面(ACID)去描述他!
A: atomicity 原子性 (一系列操作要么都完成,要么就都不完成)
C: consistency 一致性 (處理相同的字段,獲取同一個(gè)數(shù)值)
I: isolation 隔離性 (從應(yīng)用層的角度是隔離,底層的處理是通過(guò)鎖機(jī)制)
D: durability 持久性 (防止數(shù)據(jù)丟失,數(shù)據(jù)如何存儲(chǔ)相關(guān))
InnoDB 的鎖
InnoDB是支持到行鎖,但是也必須了解在進(jìn)行行鎖之前,會(huì)對(duì)表進(jìn)行加鎖的
Shared and Exclusive Locks (共享鎖和獨(dú)享鎖)
他們都是粒度,都是在行級(jí)別的鎖。
共享鎖:主要是在讀取一行數(shù)據(jù)的時(shí)候,會(huì)使用,當(dāng)其他用戶讀此行的時(shí)候,他們都會(huì)獲取這個(gè)共享鎖。
讀享鎖: 可以理解為排他鎖,主要在行數(shù)據(jù)更新或者刪除的時(shí)候,會(huì)使用的鎖。
如果當(dāng)前行數(shù)據(jù)被exclusive lock 了,那么必須等待其釋放,才能獲取共享鎖。
Intention Locks (目標(biāo)鎖)
粒度為表級(jí)別,分為兩種類(lèi)型:IS(intention shared lock) IX(intention exclusive lock)
目標(biāo)鎖是在行數(shù)據(jù)操作之前會(huì)進(jìn)行獲取。
Record Locks (記錄鎖)
主要用來(lái)對(duì)index序列進(jìn)行加鎖,防止對(duì)當(dāng)前數(shù)據(jù)的插入,更新和刪除
Gap Locks (間隙鎖)
間隙鎖可以理解為是為一段索引區(qū)間建立的鎖。
Next-Key Locks
結(jié)合記錄鎖和間隙鎖,對(duì)索引操作的鎖。
Insert Intention Locks (插入目標(biāo)鎖)
AUTO-INC Locks (自增鎖)
這個(gè)自增鎖是表級(jí)別的鎖,主要用于對(duì)某個(gè)字段進(jìn)行自增(auto increment)所使用的鎖.
Predicate Locks for Spatial Indexes
如何保證數(shù)據(jù)的一致性consistency呢?
- 使用鎖 2. InnoDB multiversion concurrency control (MVCC)