事物特性
- 原子性(Atomicity)
原子性是指事務是一個不可分割的工作單位,事務中的操作要麼都發生,要麼都不發生。 - 一致性(Consistency)
事務必須使數據庫從一個一致性狀態變換到另外一個一致性狀態 - 隔離性(Isolation)
事務的隔離性是指一個事務的執行不能被其他事務干擾,
即一個事務內部的操作及使用的數據對併發的其他事務是隔離的,併發執行的各個事務之間不能互相干擾。 - 持久性(Durability)
持久性是指一個事務一旦被提交,它對數據庫中數據的改變就是永久性的,接下來的其他操作和數據庫故障不應該對其有任何影響
事物的隔離級不同會出現如下問題
髒讀: 對於兩個事務 T1, T2, T1 讀取了已經被 T2 更新但還沒有被提交的字段.
之後, 若 T2 回滾, T1讀取的內容就是臨時且無效的.
不可重複讀: 對於兩個事務T1, T2, T1 讀取了一個字段, 然後 T2 更新了該字段.
之後, T1再次讀取同一個字段, 值就不同了.
幻讀: 對於兩個事務T1, T2, T1 從一個表中讀取了一個字段, 然後 T2 在該表中插
入了一些新的行. 之後, 如果 T1 再次讀取同一個表, 就會多出幾行
一個事務與其他事務隔離的程度稱爲隔離級別. 數據庫規定了多種事務隔
離級別, 不同隔離級別對應不同的干擾程度, 隔離級別越高, 數據一致性就
越好, 但併發性越弱
事物的隔離級別
- 每啓動一個mysql程序,就會獲得一個單獨的數據庫連接,每個數據庫連接都有一個全局變量@@tx_isolation,表示當前事物的隔離級別;
- 查看當前事物的隔離級別:select @@tx_isolation;
- 設置當前當前mysql連接的隔離級別:set transaction isolation level read committed;
- 設置數據庫系統的全局隔離級別:set global transaction isolation level read committed;