在mysql中只有使用了innodb數(shù)據(jù)引擎的數(shù)據(jù)庫或者表才支持事務(wù)稀并;
事務(wù)特性
- 原子性
指業(yè)務(wù)邏輯上的一組操作,這組操作中的每個單元单默,要么全部成功執(zhí)行碘举,要么全部執(zhí)行失敗搁廓; - 一致性
事務(wù)必須使數(shù)據(jù)庫從一個一致性的狀態(tài)變?yōu)榱硪粋€一致性的狀態(tài)引颈;例如,A向B轉(zhuǎn)賬境蜕,A和B賬戶總額為2000蝙场,則轉(zhuǎn)賬完成之后的總額也應(yīng)該為2000; - 隔離性
在開啟多個事務(wù)進行數(shù)據(jù)處理的情況下粱年,一個事務(wù)中數(shù)據(jù)操作不應(yīng)該對另一個事務(wù)中的數(shù)據(jù)操作產(chǎn)生影響售滤; - 持久性
事務(wù)一旦提交,數(shù)據(jù)就應(yīng)該永久保存下來;
事務(wù)的隔離級別(事務(wù)的特性中完箩,最麻煩的一種特性就是隔離性)
如果不考慮事務(wù)的隔離性赐俗,會出現(xiàn)一下情況
- 臟讀
一個事務(wù)讀取到了另一個事務(wù)未提交的數(shù)據(jù); - 不可重復(fù)讀
一個事務(wù)讀取到另一個事務(wù)已提交的update操作弊知; - 虛讀(幻讀)
一個事務(wù)讀取到另一個事務(wù)已提交的insert操作阻逮;
隔離級別
- READ_UNCOMMITTED(讀未提交) 會出現(xiàn)臟讀、不可重復(fù)讀秩彤、幻讀叔扼;
- READ_COMMITTED(讀已提交) 防止臟讀,會出現(xiàn)不可重復(fù)讀呐舔、幻讀币励;
- REPEATABLE_READ(可重復(fù)讀) 防止臟讀慷蠕、不可重復(fù)讀珊拼,會出現(xiàn)幻讀;
- SERIALIZABLE(串行化) 防止臟讀流炕、不可重復(fù)讀澎现、虛讀的發(fā)生;
注意:隔離界別越高每辟,數(shù)據(jù)越安全剑辫,但性能越差;