当前位置: 移动技术网 > IT编程>数据库>Mysql > 数据库事务处理

数据库事务处理

2019年04月19日  | 移动技术网IT编程  | 我要评论

今天要讲的是mysql的事务处理: 菜鸟新手一枚,先来事务的定义: 在mysql中只有使用了innodb数据库引擎的数据库或表才支持事务;事务处理可以用来维护数据库的完整性,保证成批的sql语句要么全部执行,要么全部不执行;事务用来管理insert,update,delete语句。 一般来说事务必须满足四个条件,也叫作事务的四大特性(acid):

原子性(atomicity):原子性是指事务是一个不可分割的工作单位,事务中的操作要么全部成功,要么全部失败。比如在同一个事务中的sql语句,要么全部执行成功,要么全部执行失败。一致性(consistency):事务必须是数据库从一个一致性状态换到另外一个一致性状态。例如:转账的时候,a向b转账,假设转账之前这两个用户的钱加起来总共是2000元,那么a向b转账后,不管怎么转,a和b的钱加起来还是2000元,这就是事务的一致性。隔离性(isolation):事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。持久性(durability):在软件或硬件运行崩溃时,innodb数据表会利用日志文件重构修改。 原子性很好理解,就不多解释了,下面对隔离性重点理解: 隔离性分为还几个级别: 脏读(read uncommitted):级别最低,脏读是指一个事务读取了另一个事务未提交的数据。这是非常危险的,假设a和b之间转账,如下语句: 1.update account set money=money+100 where name='b'; 2.update account set money=money-100 where name='a'; 当第一条sql执行完,第二条还没执行(a未提交),如果此时b查询自己的账户,就会发现自己多了100元钱。如果a等b走后(查询过)再回滚(代码都失效了),b就会损失100元,b再查询钱还是原来的钱。

不可重复读(read committed):不可重复读指在一个事务内读取表中的某一行数据,多次读取结果不同。 我是这样理解的:也就是结果提交后才能查询到修改过的数据,未提交时查询的是未操作的数据; 比如事务t1读取某一数据,事务t2读取并修改了该数据,t1(该事务不能结束)为了对读取值进行检验而再次读取该数据,便得到了不同的结果。

虚读(幻读)(repeatable read):是指在一个事务内读取到了别的事务插入的数据,导致前后读取不一致。 例如:丙存款100元未提交,这时银行做报表统计account表中所有用户的总额为500元,然后丙提交了,这时银行再统计(对所有数据进行更新,对某个数据更新时可能发现不了)时发现账户为600元,造成了虚读,怎么出现了幻觉,他就不敢提交了。 流程为: 事务a开启->事务a读取所有行数据->事务b开始在数据库中加入一行数据 并提交->事务对所有数据进行了更新操作(注意这里一定要是全表)———> 然后事务a再次查询表的所有数据,想看看自己的劳动成果,结果发现多出了一条数据还被改了,我只想要我刚才看到的数据啊,我是不是出现幻觉了,这样搞的事务a不敢提交了。

不可重复读和幻读的区别是: 不可重复读是指读的时候,别的事务修改了数据update; 幻读是指读的时候,别的事务插入或删除了数据 insert delete;

串行化(serializable) 一个事务获取的数据别的事务无法更改。。。会有死锁问题,效率问题。

mysql数据库共定义了四种隔离级别: 1 serializable(串行化):可避免脏读、不可重复读、虚读情况的发生 2 repeatable read(可重复读):可避免脏读、不可重复读情况的发生。 3 read committed(读已提交):可避免脏读情况发生 4 read uncommitted(读未提交):最低级别,以上情况均无法保证

select @@tx_isolation 读取当前隔离级别

设置读取隔离级别 set session transaction isolation level read uncommitted;

set session transaction isolation level read committed;

mysql 默认 set session transaction isolation level repeatable read;

rollback;使用一次,相当于撤回前面操作,需要重新开启事务操作。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网