在mysql中只有使用了innodb數據引擎的數據庫或者表才支持事務;
事務特性
- 原子性
指業(yè)務邏輯上的一組操作,這組操作中的每個單元,要么全部成功執(zhí)行,要么全部執(zhí)行失敗; - 一致性
事務必須使數據庫從一個一致性的狀態(tài)變?yōu)榱硪粋€一致性的狀態(tài);例如,A向B轉賬,A和B賬戶總額為2000,則轉賬完成之后的總額也應該為2000; - 隔離性
在開啟多個事務進行數據處理的情況下,一個事務中數據操作不應該對另一個事務中的數據操作產生影響; - 持久性
事務一旦提交,數據就應該永久保存下來;
事務的隔離級別(事務的特性中,最麻煩的一種特性就是隔離性)
如果不考慮事務的隔離性,會出現一下情況
- 臟讀
一個事務讀取到了另一個事務未提交的數據; - 不可重復讀
一個事務讀取到另一個事務已提交的update操作; - 虛讀(幻讀)
一個事務讀取到另一個事務已提交的insert操作;
隔離級別
- READ_UNCOMMITTED(讀未提交) 會出現臟讀、不可重復讀、幻讀;
- READ_COMMITTED(讀已提交) 防止臟讀,會出現不可重復讀、幻讀;
- REPEATABLE_READ(可重復讀) 防止臟讀、不可重復讀,會出現幻讀;
- SERIALIZABLE(串行化) 防止臟讀、不可重復讀、虛讀的發(fā)生;
注意:隔離界別越高,數據越安全,但性能越差;