事務的特性:
原子性:事務不可分割,組成事務的各個邏輯不可分割
一致性:事務執行的前後,數據完整保持一致
隔離性:事務執行不應該受到其他事務的干擾
持久性:事務一旦結束,數據就持久化到數據庫中
如果不考慮事務的隔離性,會引發一些安全問題:
髒讀: 一個事務讀取到另一個事務未提交的數據。
不可重複讀:一個事務讀取到另一個事務提交的更新的數據,導致多次查詢結果不一致。
幻讀:一個事務讀取到另一個事務提交的新增的數據,導致多次查詢的結果不一致。
Mysql數據庫有4種隔離級別7種傳播行爲
事務的隔離級別:
read uncommitted(讀取未提交內容):可能發生髒讀,不可重複讀,幻讀。
read committed(讀取已提交內容):避免髒讀,但可能發生不可重複讀和紀讀
repeatable read(可重讀):避免髒讀和不可重複讀,但可能幻讀
serializable(可串行化):避免髒讀,不可重複讀,幻讀
傳播行爲:
propagation_required:如果當前沒有事務,就創建一個新事務;如果當前存在事務,就用當前事務。
propagation_nested:如果當前存在事務,則在嵌套事務內執行;如果當前沒有事務,則是required的操作
propagation_supports:如果當前有事務,就加入該事務;如果當前沒有事務,就以非事務執行
propagation_madatory:如果當前有事務,就加入該事務;如果當前沒有事務,就拋出異常
propagation_requires_new:無論當前有沒有事務,都創建新事務
propagation_not_supported:以非事務方式執行操作,如果當前有事務,就把當前事務掛起
propagation_never:以非事務方式執行,如果當前有事務,則拋出異常