MySQL的事务四大特性、事务隔离级别、事务失效场景详解

一、事务的四大特性(ACID):

1、A(原子性 Atomicity):

原子性是指事务必须是一个原子的操作,事务中包含的各项操作在一次执行过程中,要么都发生,要么都不发生

2、C(一致性 Consistency):

一个事务在执行之前和执行之后,数据库都必须处以一致性状态

例如:从A账户转账到B账户,不能因为程序报错或其他原因A账户扣了钱,而B账户没有增加钱

3、I(隔离性 Isolation):

事务的隔离性是指在并发场景中,每个事务之间是互相隔离、互相独立的,一个事务的执行不能被其它事务干扰

4、D(持久性 Durability):

事务的持久性是指事务一旦提交后,数据库中的数据必须被永久的保存下来(写入磁盘)。即使服务器系统崩溃或服务器宕机等故障。只要数据库重新启动,那么一定能够将其恢复到事务成功结束后的状态

二、事务的隔离性说明

1、读未提交(READ_UNCOMMITTED)

一个事务还没有提交时,它做的变更就能被别的事务看到。会产生脏读

脏读:一个事务读到另一个事务变更了但未提交的数据

2、读已提交(READ_COMMITTED)

一个事物提交之后,它做的变更才会被其他事务看到。会产生不可重复读

不可重复读:一个事务两次读同一行数据,可是这两次读到的数据不一样

3、可重复读(REPEATABLE_READ),是MySQL默认隔离级别

一个事物执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。会产生幻读

幻读:一个事务执行两次查询,但第二次查询比第一次查询多出了一些数据行、或者第二次查询的数据和第二次查询的数据结果不一致

4、串行化(SERIALIZABLE)

串行化隔离级别最高也是最安全的级别,不会产生脏读、不可重复读、幻读问题。对于同一行记录,写会加“写锁”、读会加“读锁”,当出现锁冲突时,后访问的事务需要等前一个事务执行完成,才能继续执行。

事务排队一个一个来,效率最低

三、事务常见失效场景:

1、不适当的事务传播机制,常用的事务传播机制:propagation = Propagation.REQUIRED

2、异常被方法内部捕捉(catch)后,并且没有抛出

3、非public修饰的方法,例如(private、final、static)等

4、当前类没有被Spring IOC容器管理

你可能感兴趣的:(MySQL,Oracle,PostgreSQL,mysql,sprint)