Mysql事务

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-08 21:06:12

1.什么是事务

事务是一条或多条数据库操作语句的组合,具备ACID四个特点。

原子性(Atomicity):一个事务要么全部执行,要么全部不执行。也就是说一个事务不可能执行到一半就停止了。比如:去超时购买商品,付钱和拿到商品这两步要么同时执行,要么都不执行。

一致性(Consistency):指事务的运行不会改变数据库中数据的一致性。比如:a+b=10,a改变了,b也应该随之变化。

隔离性(Isolation):一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是个例的,并发执行的各个事务之间不能相互干扰。

持久性(Durability):一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。当事务提交之后,数据会持久化到硬盘,修改是永久性的。

事务并发会发生什么问题?

脏读

一个事务在执行的过程中读取到了其他事务还没有提交的数据。

不可重复读

事务A在读取一条记录时,这个事务还没有结束,事务B对这个记录进行修改,事务A再次读取这条记录时,记录发生了变化。也就是事务A两次读取到的数据发生了变化成为不可重复读。

幻读

事务A读取表中的数据,事务B在事务A还没有结束时,进行了插入操作,事务A再次读取,发现表中有新的数据,就好像发生了幻觉一样。

事务的隔离级别:

隔离级别分为四种:

读未提交:READ-UNCOMMITTED

读已提交:READ-COMMITTED

可重复读:REPEATABLE-READ

串行:SERIALIZABLE

上面四种隔离级别越来越强,会导致数据库的并发性也越来越低。Mysql的默认级别是REPEATABLE-READ

隔离级别 脏读 不可重复读 幻读
READ-UNCOMMITTED
READ-COMMITTED
REPEATABLE-READ
SERIALIZABLE

注意:幻读只会在可重复读级别中才会出现,其他级别中不存在。

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!