當前在開發erp系統,使用到的資料庫為mysql。下面介紹下如何開啟事務,以及事務隔離的機制 :
1. 檢查當前資料庫使用的儲存引擎。
2. 修改前my.ini中的檔案如下:
3. 修改my.ini的檔案如下。
3.1 修改了預設的儲存引擎
3.2 增加了mysql資料庫的事務隔離級別, 如果不新增預設是repeatable-read.
4. 只需要重啟mysql的服務即可。
5. 再次查詢show engines,顯示如下
6. 事務隔離機制的說明,以下引用自別人的文章
在mysql中預設事務隔離級別是可重複讀(repeatable read).可通過sql語句查詢:
檢視innodb系統級別的事務隔離級別:mysql> select @@global.tx_isolation;
在mysql中預設事務隔離級別是可重複讀(repeatable read).可通過sql語句查詢:
檢視innodb系統級別的事務隔離級別:
mysql> select @@global.tx_isolation;
結果:+-----------------------+
| @@global.tx_isolation |
+-----------------------+
| repeatable-read |
+-----------------------+
1 row in set (0.00 sec)
檢視innodb會話級別的事務隔離級別:
mysql> select @@tx_isolation;
結果:+-----------------+
| @@tx_isolation |
+-----------------+
| repeatable-read |
+-----------------+
1 row in set (0.00 sec)
修改事務隔離級別:
mysql> set global transaction isolation level read committed;
query ok, 0 rows affected (0.00 sec)
mysql> set session transaction isolation level read committed;
query ok, 0 rows affected (0.00 sec)
innodb 的可重複讀隔離級別和其他資料庫的可重複讀是有區別的,不會造成幻象讀(phantom read),所謂幻象讀,就是同乙個事務內,多次select,可以讀取到其他session insert並已經commit的資料。下面是乙個小的測試,證明innodb的可重複讀隔離級別不會造成幻象讀。測試涉及兩個session,分別為 session 1和session 2,隔離級別都是repeateable read,關閉autocommit
mysql> select @@tx_isolation;
+-----------------+
| @@tx_isolation |
+-----------------+
| repeatable-read |
+-----------------+
1 row in set (0.00 sec)
mysql> set autocommit=off;
query ok, 0 rows affected (0.00 sec)
session 1 建立表並插入測試資料
mysql> create table test(i int) engine=innodb;
query ok, 0 rows affected (0.00 sec)
mysql> insert into test values(1);
query ok, 1 row affected (0.00 sec)
session 2 查詢,沒有資料,正常,session1沒有提交,不允許髒讀
mysql> select * from test;
empty set (0.00 sec)
session 1 提交事務
mysql> commit;
query ok, 0 rows affected (0.00 sec)
session 2 查詢,還是沒有資料,沒有產生幻象讀
mysql> select * from test;
empty set (0.00 sec)
當session2提交事務後才可以看到session1的插入資料;
以上試驗版本:
mysql> select version();
+-------------------------+
| version() |
+-------------------------+
| 5.0.37-community-nt-log |
+-------------------------+
1 row in set (0.00 sec)
MySQL資料庫之事務管理
4.事務的隔離級別 二 事務的操作 2.案例演示 1.模擬生活 生活中往往出現這樣一種場景,一件事情中包含多個任務,只有多個任務同時完成事務才能辦成,否則只要有乙個任務失敗,整件事情失敗。如公司的運營,所有員工共同配合 2.事務的定義 資料庫事務 transaction 是訪問並可能操作各種資料項的...
資料庫事務管理
一 事務的特性 acid 二 3個問題 幻讀和不可重複讀看起來一樣,但鎖的機制不同,幻讀對應insert和delete 操作,不可重複讀對應update操作 具體說就是不可重複讀鎖定一行資料,是行鎖,幻讀鎖定整個條件區域,是序列鎖。三 樂觀鎖和悲觀所 以上說的鎖,通過資料庫的鎖機制控制,鎖定後其他操...
Spring資料庫事務管理
事務 transaction 是併發控制的基本單位。所謂的事務,它是乙個操作序列,這些操作要麼都執行,要麼都不執行,它是乙個不可分割的工作單位。例如,銀行轉賬工作 從乙個賬號扣款並使另乙個賬號增款,這兩個操作要麼都執行,要麼都不執行,在關聯式資料庫中,乙個事務可以是一條sql語句 一組sql語句或整...