一、事務的特性
ACID
原子性:一個事務不可再分割,要麼都執行要麼都不執行
一致性:一個事務執行會使數據從一個一致狀態切換到另外一個一致狀態
隔離性:一個事務的執行不受其他事務的干擾
持久性:一個事務一旦提交,則會永久的改變數據庫的數據.
二、事務的創建
隱式事務:事務沒有明顯的開啓和結束的標記
比如insert、update、delete語句
顯式事務:事務具有明顯的開啓和結束的標記
前提是必須先設置自動提交功能爲禁用
步驟1:開啓事務 set autocommit=0;
start transaction;可選的
步驟2:編寫事務中的sql語句(select insert update delete)
語句1;
語句2; ...
步驟3:結束事務 commit;
提交事務 rollback;
三、事務的隔離級別
|
髒讀 |
不可重複讀 |
幻讀 |
read uncommitted |
√ |
√ |
√ |
read committed |
|
√ |
√ |
repeatable read |
|
|
√ |
serializable |
|
|
|
mysql中默認第三個隔離級別:repeatable read
oracle中默認第二個隔離級別:read committed
查看隔離級別:select @@tx_isolation
設置隔離級別:set session|global transaction isolation level 隔離級別
session(當前mysql連接)、global(數據庫全局)
四、savepoint的使用
SET autocommit=0;
START TRANSACTION;
DELETE FROM account WHERE id=25;
SAVEPOINT a;#設置保存點
DELETE FROM account WHERE id=28;
ROLLBACK TO a;#回滾到保存點