原子性Atomicity
核心就是 undo log 回滾日志 可以回滾到之前的狀態(tài)
原子性只是說
要么 全成
要不 回滾 全不成
如果期間smith存了300元,回滾沒掉了(破壞了一致性) ,原子性還是保證了
如果期間, 2個人都是0元被其他事物看到了, 也不算破壞了原子性
一致性Consistency :
賬戶總余額要一致. 從一個一致的狀態(tài), 變成另一個一致的狀態(tài)
2人之間轉賬, 開始時a+b=100, 就一直要是 a+b=100, 視點3(a0,b0)就破壞了一致性
本質是,保證能看到所有的修改 (不會有的修改因為并行被覆蓋了),保證happen_before關系
最直接的就是串行(視點3),手段是加鎖,鎖, 一個個事務排隊
不能線程1在寫 線程2去寫同個內容,
但是并發(fā)低,所以我們需要隔離性(原來是這樣)
mvcc里面 是視點1 , 寫的時候 也能讀,但是讀到的是以前的
視點3就沒有一致性, 二個人都是0元的被看到了
隔離性Isolation :
沒提交的時候 對其他事物是不可見的 為了增加并發(fā)但是適當破壞了一致性
有4個隔離級別,
排他鎖:串行化
讀寫鎖: 可重復讀(讀的時候不能寫) 不可重復讀(讀的時候能寫)
持久性Durability
一旦事務提交 修改永久保存(redo log保證),不能被看到了還回滾
事務的層層改進 并發(fā)提升:
只有這個才是完全的一致性
排隊串行,就一個隊
↓改進 多個隊,不相關的表不用在一個隊
讀讀↓ 可并行
再提高并發(fā),就是讀不鎖,讀的時候隨時可以寫(會造成不可重復讀)
最終的進化↓ 現(xiàn)在實際中用的 到這時候 只有寫寫會沖突