日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql事务的重复性读_Mysql下InnoDB的可重复读级别的事务测试

發布時間:2023/12/2 数据库 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql事务的重复性读_Mysql下InnoDB的可重复读级别的事务测试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Mysql下InnoDB的可重復讀的事務測試

### 背景:

* mysql版本:Server version: 5.1.71

* 操作系統:CentOS 6.5 X64

* 事務隔離級別:不可重復讀

### 實驗前的準備:

mysql> use test;

mysql> create table test_table(id int primary key, name varchar(255)) ENGINE=InnoDB;

mysql> insert into test_table value(1, 'lily');

mysql> create table test_table2(id int primary key, name varchar(255)) ENGINE=InnoDB;

mysql> insert into test_table2 value(1, 'lucy');

### 實驗1

問題:事務從什么時候開始?

測試兩邊同事開啟事務,只在終端A中進行update操作,提交完成之后,在終端B中觀察

步驟????????????????????? 終端A??????????????????????????????????????? 終端B

1??????? mysql> set autocommit = off;????????????????????? mysql> set autocommit = off;

2??????? mysql> update test_table set name = 'lucy';

3??????? mysql> commit;

4????????????????????????????????????????????????????????? mysql> select * from test_table;

+----+--------+

| id | name?? |

+----+--------+

|? 1 | lucy?? |

+----+--------+

1 rows in set (0.00 sec)

在終端B中直接可以看到終端A所做的修改,說明事務并不是從命令"set autocommit = off"執行時就開始;

還原影響數據:

mysql> update test_table set name = 'lily';

mysql> commit;

只在終端A中進行更新操作,同時在終端B中對庫中的任意一個表進行一個操作,終端A提交之后,觀察終端B中的數據;然后在終端B中執行commit之后,再次查看終端A中修改的數據。

步驟????????????????????? 終端A??????????????????????????????????????? 終端B

1??????? mysql> rollback;????????????????????????????????? mysql> rollback;

2??????? mysql> update test_table set name = 'lucy';?????? mysql> select * from test_table2;

3??????? mysql> commit;

4????????????????????????????????????????????????????????? mysql> select * from test_table;

+----+--------+

| id | name?? |

+----+--------+

|? 1 | lily?? |

+----+--------+

1 row in set (0.00 sec)

mysql> commit;

mysql> select * from test_table;

+----+--------+

| id | name?? |

+----+--------+

|? 1 | lucy?? |

+----+--------+

1 row in set (0.00 sec)

這里啟動了事務,說明事務是以第一條SQL時開始的

### 實驗2

問題:InnoDB在不可重復讀隔離級別下,有沒有幻讀情況

還原影響數據:

mysql> update test_table set name = 'lily';

mysql> commit;

步驟????????????????????? 終端A??????????????????????????????????????? 終端B

1??????? mysql> rollback;????????????????????????????????? mysql> rollback;

2??????? mysql> insert into test_table value(2, 'lucy');?? mysql> select * from test_table2;

3??????? mysql> commit;

4????????????????????????????????????????????????????????? mysql> select * from test_table;

+----+--------+

| id | name?? |

+----+--------+

|? 1 | lily?? |

+----+--------+

1 row in set (0.00 sec)

mysql> rollback;

mysql> select * from test_table;

+----+--------+

| id | name?? |

+----+--------+

|? 1 | lily?? |

|? 2 | lucy?? |

+----+--------+

2 rows in set (0.00 sec)

這里沒有存在幻讀的情況,說明InnoDB對幻讀有處理。

### 實驗3

問題:同事開啟兩個事務A和B,事務A中插入一條記錄R,事務B中插入另一條記錄R2,R2的主鍵與記錄R相同,如何處理?

還原影響數據:

mysql> delete from test_table where id = 2;

mysql> commit;

步驟????????????????????? 終端A??????????????????????????????????????? 終端B

1??????? mysql> rollback;????????????????????????????????? mysql> rollback;

2??????? mysql> insert into test_table value(2, 'lucy');?? mysql> select * from test_table2;

3??????? mysql> commit;

4????????????????????????????????????????????????????????? mysql> insert into test_table value(2, 'lucy');

ERROR 1062 (23000): Duplicate entry '2' for key 'PRIMARY'

這種情況下,會報錯。

### 實驗4

問題:不同事務更新同一條記錄。

步驟????????????????????? 終端A?????????????????????????????????????? ??? ??? ?終端B

1??????? mysql> rollback;???????????????????????????????? ??? ??? ??? ?mysql> rollback;

2??????? mysql> update test_table set name = 'lily2' where id = 1;

3?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?? mysql> update test_table set name = 'lily3' where id = 1;

... 卡住 ... 在超過一定時間之后報錯:

ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

兩個事務在編輯同一條數據時,先編輯的事務會將該記錄鎖定,或編輯的事務會等待一定時間,如果一定直接內仍然被鎖定則報錯。

總結

以上是生活随笔為你收集整理的mysql事务的重复性读_Mysql下InnoDB的可重复读级别的事务测试的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。