文章目录
- 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>