預設情況下, mysql啟用自動提交模式(變數autocommit為on)
由於變數autocommit分會話系統變數與全域性系統變數,所以查詢的時候,最好區別是會話系統變數還是全域性系統變數。
mysql> show session variables like 'autocommit';
+---------------+-------+
| variable_name | value |
+---------------+-------+
| autocommit | on |
+---------------+-------+
1 row in set (0.00 sec)
mysql> show global variables like 'autocommit';
+---------------+-------+
| variable_name | value |
+---------------+-------+
| autocommit | on |
+---------------+-------+
1 row in set (0.00 sec)
mysql>
value
的值為on,表示autocommit開啟。off表示autocommit關閉
修改autocommit模式
mysql> set session autocommit=0;
query ok, 0 rows affected (0.00 sec)
mysql> show session variables like 'autocommit';
+---------------+-------+
| variable_name | value |
+---------------+-------+
| autocommit | off |
+---------------+-------+
1 row in set (0.00 sec)
mysql> show global variables like 'autocommit';
+---------------+-------+
| variable_name | value |
+---------------+-------+
| autocommit | on |
+---------------+-------+
1 row in set (0.00 sec)
mysql>
mysql> set global autocommit=0;
query ok, 0 rows affected (0.00 sec)
mysql> show global variables like 'autocommit';
+---------------+-------+
| variable_name | value |
+---------------+-------+
| autocommit | off |
+---------------+-------+
1 row in set (0.01 sec)
mysql>
注意,上述sql修改會話系統變數或全域性系統變數,只對當前例項有效,如果mysql服務重啟的話,這些設定就會丟失,如果要永久生效,就必須在配置檔案中修改系統變數。
[mysqld]
autocommit=0
autocommit與顯性事務的關係
對於顯性事務start transaction或begin, 在自動提交模式關閉(關閉隱式提交)的情況下,開啟乙個事務上下文。首先資料庫會隱式提交之前的
還未被提交的操作
,同時開啟乙個新事務。
使用start transaction,自動提交將保持禁用狀態,直到你使用commit或rollback結束事務。 自動提交模式然後恢復到之前的狀態(如果start transaction 前 autocommit = 1,則完成本次事務後 autocommit 還是 1。如果 start transaction 前 autocommit = 0,則完成本次事務後autocommit 還是 0)
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. 設定隔離級別(不區分大小寫)
1)read uncommitted : 讀取尚未提交的資料 :哪個問題都不能解決使用者可以用set transaction語句改變單個會話或者所有新進連線的隔離級別。它的語法如下:2)read committed:讀取已經提交的資料 :可以解決髒讀 ---- oracle預設的
3)repeatable read:重讀讀取:可以解決髒讀 和 不可重複讀 ---mysql預設的
4)serializable:序列化:可以解決 髒讀 不可重複讀 和 虛讀---相當於鎖表
set [session | global] transaction isolation level
注意:預設的行為(不帶session和global)是為下乙個(未開始)事務設定隔離級別。如果你使用global關鍵字,語句在全域性對從那點開始建立的所有新連線(除了不存在的連線)設定預設事務級別。你需要super許可權來做這個。使用session 關鍵字為將來在當前連線上執行的事務設定預設事務級別。 任何客戶端都能自由改變會話隔離級別(甚至在事務的中間),或者為下乙個事務設定隔離級別。
你可以用下列語句查詢全域性和會話事務隔離級別:
select @@global.tx_isolation;
select @@session.tx_isolation;
select @@tx_isolation;
MySQL事務相關概念,特點
1 事務的概念 事務 一組邏輯操作單元,使資料從一種狀態變換到另一種狀態。事務處理 事務操作 保證所有事務都作為乙個工作單元來執行,即使出現了故障,都不能改變這種執行方式。當在乙個事務中執行多個操作時,要麼所有的事務都被提交 commit 那麼這些修改就永久地儲存下來 要麼資料庫管理系統將放棄所作的...
事務介紹,mysql事務引數設定
原子性 強調事務中的多個操作時乙個整體 atomicity 一致性 強調資料庫中不會儲存不一致狀態性 consistency 隔離性 強調資料庫中事務之間相互不可見 isolation 永續性 強調資料庫能永久儲存資料,一旦提交就不可撤銷 durability mysql資料庫預設採用自動提交 au...
設定MySQL事務隔離級別
select tx isolation 檢視隔離級別 set transaction isolation level read uncommitted 設定讀未提交級別 start transaction 開啟事務 rollback 回滾 commit 提交 set transaction isol...