事务总结1

事务的四大属性(ACID)

1 原子性(Atomicity)

​ 指事务包含的操作要么都成功,要么都不成功;不成功不能对数据库有任何影响

2 一致性(Consistency)

​ 指事务必须使数据库从一个一致性状态变换到另一个一致性状态;即一个事务执行前后必须处于一致状态

3 隔离性(Isolation)

​ 指当多个用户并发访问数据库时,数据库为每个访问开启一个事务,多个并发事务之间要相互隔离(隔离存在隔离级别

4 持久性(Durability)

​ 指事务一旦提交,那么对数据库中的数据的改变是永久性的,即使数据库系统遇到故障的情况下也不会丢失提交的数据

SQL 标准规定的四个事务隔离等级(隔离性内容

隔离等级 脏读 不可重复读 幻读
Read_Uncommitted(读未提交) 允许 允许 允许
Read_Committed(读已提交) 禁止 允许 允许
Repeatable_Read(可重复读) 禁止 禁止 允许
Serializable(串行化) 禁止 禁止 禁止

1. Read_Uncommited(读取未提交)

即一个事务过程中可以读取到另一个还未提交的事务的数据。

(1)所有事务都可以看到其他事务的结果,不管事务是否提交

(2) 这个隔离级别基本不用,性能也没比其他级别好多少

(3) 会引发脏读问题,即读到未提交的内容,而这个内容可能再之后回滚了

2. Read_Committed(读已提交)

即一个事务过程可以读到另一个已经提交的事务的数据(常用

(1) 多数数据的默认隔离级别,但不是mysql的默认级别

(2) 它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变

(3) 这个隔离级别出现的问题是——不可重复读 (但还是会出现幻读)

不可重复读意味着我们再同一个事务中执行两(或多)次同样的select(同一行数据)时可能会得到不一样的结果(因为别的事务可能提交了更新的数据)【当然新增的数据也会读到, 即幻读】

3. Repeatable_Read(可重复读)

(1) Mysql 默认事务隔离级别(但经测试,公司的用的是Read_Committed)

(2) 它可以确保同一事务的多次读取数据时,会得到同样的数据

(3)此级别会出现幻读(不会出现不可重复读):当用户读取某一范围的数据行时,另一个事务又在该范围内插入新行(并提交),当用户再读取该范围数据行是,会出现新增的行

4. Serializable(串行化)

(1) 最高隔离级别, 并发性能也最差

(2) 强制事务排序,一个一个执行,达到解决幻读问题

(3) 这个级别,可能会导致大量的超时现象和所竞争

posted @ 2022-03-26 09:02  明月照江江  阅读(31)  评论(0编辑  收藏  举报