邏輯交易管理 --基本上應用於innodb引擎
- begin [work] start transaction [with consistent snapshot]
- commit [work] [and [no] chain] [[no] release]
- rollback [work] [and [no] chain] [[no] release]
- set autocommit = {1(預設)|0}
mysql的交易管理有一定的模式
- completion_type系統變數決定一個事務完成後應該做什麼的行為模式
- autocommit系統變數決定事務完成後是否自動認可!
- 在儲存程式內:begin [work] 當作簡單的begin end 塊的begin,而不是事務的開始。如果要開始事務應該使用start transaction
- mysql的client api 通常有自己的開始事務的表達形式
- 開始事務會造成完成掛起的事務隱式commit;同時也會使之前使用lock tables語句擷取的“表鎖”自動釋放,如同執行unlock tables;但不會釋放flush tables with read lock 獲得的“全域讀鎖”
- mysql的許多語句(一般是ddl語句:{create|drop} database、{create|alter|drop} {tables|routines}),在事務裡不要包含此類語句,否則rollback失敗
- mysql的許多語句會造成事務的隱式commit,如:ddl語句、dcl語句、檔案系統相關語句、交易管理語句等等
事務savepoint
- savepoint svp_name --如果新的 事務儲存點的名稱和已有的same,則會覆蓋舊的
- rollback [work] to [savepoint] svp_name --交易回復到指定的儲存點
- release savepoint svp_name 刪除定義的事務儲存點。注意不會引起事務的commit或rollback
表鎖
- lock tables {table_name [[as] alias] {read [lock] | [low_priority] wirte}} [,...]
- unlock tables
交易隔離等級
set [global | session(預設)] transaction isolation level { read uncommitted | read committed | repeatable read | serializable }
xa事務