MySQL資料庫的事務管理

2022-03-04 20:32:39 字數 3059 閱讀 1909

當前在開發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語句或整...