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

1.原子性(Atomicity)

原子性是指一个事务的操作要么全部成功,要么全部失败回滚。保证事务的操作成功则全部应用到数据库,失败则不能对数据库产生任何影响。

2.一致性(Consistency)

一致性是指事务必须从一个一致性状态转换到另一个一致性状态。也就是一个事务在执行之前到执行之后都要必须处于一致性状态。

(例如A向B转了10000元,不能A扣了钱后B再加钱)

3.隔离性(Isolation)

当多个用户共同操作同一个数据库时,数据库为某一个用户开启的事务,不能为其他用户所干扰。

4.持久性(Durability)

一个事务一旦提交了,那么数据库对数据的改变将是永久的。

 


二:四种事务隔离级别

2.1:事务的并发问题

1.脏读

B对数据进行增删查改操作且未提交,如果A读取到B的数据,B回滚,那么A读取到的将是脏数据。

2.不可重复读

事务A对数据进行多次读操作,事务B在其间对数据进行了修改,这是两次读取的数据不一致。

3.幻读

事务A对一定范围内的数据进行修改,这时事务B在此范围内增加了一条数据,则A丢失对该数据的修改。

 


2.2 事务隔离级别

 

事务隔离级别

脏读

不可重复读

幻读

读未提交




读已提交




可重复读




串行化




 

1.读未提交(read-uncommited)

如果一个事务已经开始写数据,则另外一个事务不允许同时进行写操作,但允许其他事务读此行数据,该隔离级别可以通过“排他写锁”,但是不排斥读线程实现。这样就避免了更新丢失,却可能出现脏读,也就是说事务B读取到了事务A未提交的数据.

2.读已提交(read-commited)

如果是读事务,将允许其他事务读写,如果是写事务,将禁止其他事务对其进行访问。

3.可重复读(Repeatable read)

一个事务可以多次读一个数据,在该事务执行结束时,其他事务不能对该数据进行访问。

4.串行化(Serializable)

提供严格的事务隔离,它要求事务序列化执行,事务只能一个接一个地执行。