1. 首先說一下autocommit
默認情況下autocommit的開關是打開的,也就是ON,查看方法
方法1. select @@[global/session].autocommit;
方法2. show [global/session] variables like 'autocommit';
其中global代表的是全局,session代表的是當前。可以不寫global和session,默認似乎就是session了。
autocommit的作用
顧名思義,自動提交,在命令行執行sql語句的時候,每輸入一行語句並執行實質上就是完成了一次事務,因為他自動commit了,當把autocommit關閉后,則執行的語句並未真實提交,在不顯示執行commit命令前,其實都還在當前事務中,如果另開一個窗口執行sql語句,如果該窗口的隔離級別是read committed那么將看不到之前那個窗口(會話)中未提交的對表修改。
2. 設置隔離級別(不區分大小寫)
用戶可以用SET TRANSACTION語句改變單個會話或者所有新進連接的隔離級別。它的語法如下:
SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}
注意:默認的行為(不帶session和global)是為下一個(未開始)事務設置隔離級別。如果你使用GLOBAL關鍵字,語句在全局對從那點開始創建的所有新連接(除了不存在的連接)設置默認事務級別。你需要SUPER權限來做這個。使用SESSION 關鍵字為將來在當前連接上執行的事務設置默認事務級別。 任何客戶端都能自由改變會話隔離級別(甚至在事務的中間),或者為下一個事務設置隔離級別。
你可以用下列語句查詢全局和會話事務隔離級別:
SELECT @@global.tx_isolation;
SELECT @@session.tx_isolation;
SELECT @@tx_isolation;