文章目錄
- 0、四種隔離級別
- 1、創建表 account
- 2、修改當前會話隔離級別為 read uncommitted
- 2.1、會出現臟讀
- 3、修改當前會話隔離級別為 read committed
- 3.1、可以解決臟讀
- 3.2、會出現不可重復讀
- 4、修改當前會話隔離級別為 repeatable read(默認)
- 4.1、解決不可重復讀
- 4.2、會出現幻讀
- 5、修改當前會話隔離級別為 serializable
- 5.1、可以解決幻讀
0、四種隔離級別
1、創建表 account
drop table if exists account;
create table account(
id int primary key AUTO_INCREMENT comment 'ID',
name varchar(10) comment '姓名',
money double(10,2) comment '余額'
) comment '賬戶表';
insert into account(name, money) VALUES ('張三',2000), ('李四',2000);
2、修改當前會話隔離級別為 read uncommitted
mysql> select @@transaction_isolation;
+-------------------------+
| @@transaction_isolation |
+-------------------------+
| REPEATABLE-READ |
+-------------------------+
1 row in set (0.00 sec)mysql> set session transaction isolation level read uncommitted;
Query OK, 0 rows affected (0.00 sec)mysql> select @@transaction_isolation;
+-------------------------+
| @@transaction_isolation |
+-------------------------+
| READ-UNCOMMITTED |
+-------------------------+
1 row in set (0.00 sec)mysql>
2.1、會出現臟讀
一個事務讀到另外一個事務還沒有提交的數據。
>
如果要解決臟讀可以把隔離級別修改為 read committed
3、修改當前會話隔離級別為 read committed
3.1、可以解決臟讀
3.2、會出現不可重復讀
一個事務先后讀取同一條記錄,但兩次讀取的數據不同,稱之為不可重復讀
4、修改當前會話隔離級別為 repeatable read(默認)
4.1、解決不可重復讀
4.2、會出現幻讀
一個事務按照條件查詢數據時,沒有對應的數據行,但是在插入數據時,又發現這行數據已經存在,好像出現了幻影
5、修改當前會話隔離級別為 serializable
mysql> set session transaction isolation level serializable;
Query OK, 0 rows affected (0.00 sec)mysql> select @@transaction_isolation;
+-------------------------+
| @@transaction_isolation |
+-------------------------+
| SERIALIZABLE |
+-------------------------+
1 row in set (0.00 sec)mysql>