MYSQL事务之隔离级别、事务四大特性(详解)

事务四大特性

  • 原子性:整个事务作为一个整体,要么都成功,要么都失败。
  • 一致性:同一个事务,相同的条件,不同的时间要得到相同的结果
  • 隔离性:两个事务在未提交之前只能看到自己修改是数据,不能看到对方修改的数据。
  • 持久性:持久化到磁盘

查看数据库及当前会话的事务隔离级别:

mysql> select @@global.tx_isolation,@@tx_isolation;
+-----------------------+-----------------+
| @@global.tx_isolation | @@tx_isolation  |
+-----------------------+-----------------+
| REPEATABLE-READ       | REPEATABLE-READ |
+-----------------------+-----------------+
1 row in set (0.00 sec)

分别设置数据库及当前事务的隔离级别:

SET GLOBAL tx_isolation='REPEATABLE-READ'; 
SET SESSION tx_isolation='SERIALIZABLE';

事务的四个隔离级别分别为:

  • REPEATABLE    RREAD:可重复读,(默认级别)
  • READ   COMMITTED:读已提交
  • READ  UNCOMMITTED :读未提交
  • SERIALIZABLE:串行化

(事务的隔离级别建议在创建数据路的时候,在配置文件中指定,最好不要后期修改)

详解如下:

可重复读:

1、避免了脏读(事务1未提交的数据事务2读不到)

2、避免不可重复读(两个都开启事务,一个会话修改数据,另一个会话查不到)

3、避免了幻读 (两个都开启事务,一个会话增加或删除一行,统计行数,另一个会话统计行数和前会话统计的行数不相同,是修改之前的行数)

4、发生了丢失更新(两个会话分别开启事务,会话1修改一行数据,会话2 也修改这行数据,会话1查看到的不是自己修改的结果,而是回话2 修改的结果)

已提交读:

1、避免了脏读 (事务1未提交的数据事务2读不到)

2、发生了不可重复读(两个都开启事务,一个会话修改数据,另一个会话能查到)

3、发生了幻读 (两个都开启事务,一个会话增加或删除一行,统计行数,另一个会话统计行数和前会话统计的行数相同,)

4、发生了丢失更新(两个会话分别开启事务,会话1修改一行数据,会话2 也修改这行数据,会话1查看到的不是自己修改的结果,而是会话2 修改的结果)

未提交读:

1、发生了脏读(事务1未提交的数据事务2能读到)

2、发生了不可重复读(两个都开启事务,一个会话修改数据,另一个会话能查到)

3、发生了幻读 (两个都开启事务,一个会话增加或删除一行,统计行数,另一个会话统计行数和前会话统计的行数相同,)

4、发生了丢失更新(两个会话分别开启事务,会话1修改一行数据,会话2 也修改这行数据,会话1查看到的不是自己修改的结果,而是回话2 修改的结果)

串行化:

1、避免了脏读会话1update后会话2没有查看的权利,提交后才能查看)会话1 先连mysql数据库,会话2后连

2、避免不可重复读(两个都开启事务,一个会话修改数据,另一个会话查不到)

3、避免了幻读 (两个都开启事务,一个会话增加或删除一行,统计行数,另一个会话统计行数和前会话统计的行数不相同,是修改之前的行数)

4、避免了丢失更新(两个会话分别开启事务,会话1修改一行数据,会话2 也修改这行数据,会话1查看到的不是自己修改的结果,而是回话2 修改的结果)

猜你喜欢

转载自blog.csdn.net/qq_42935487/article/details/88802734