加入收藏 | 设为首页 | 会员中心 | 我要投稿 源码门户网 (https://www.92codes.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL事务的基础学习以及心得共享

发布时间:2022-01-21 16:35:14 所属栏目:MySql教程 来源:互联网
导读:这篇文章主要介绍了MySQL事务的基础学习以及心得分享,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 事务是逻辑上的一组操作,组成这组操作的各个单元,要不全都成功要不全都失败,
     这篇文章主要介绍了MySQL事务的基础学习以及心得分享,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
 
     事务是逻辑上的一组操作,组成这组操作的各个单元,要不全都成功要不全都失败,这个特性就是事务,下面就是关于MySQL事务学习中的心得分享:
 
事务的特性
 
1.原子性(Atomicity):原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
 
2.一致性(Consistency):在一个事务中,事务前后数据的完整性必须保持一致,可以想象银行转账、火车购票。
 
3.隔离性(Isolation):多个事务,事务的隔离性是指多个用户并发访问数据库时, 一个用户的事务不能被其它用户的事务所干扰,多个并发事务之间数据要相互隔离。
 
4.持久性(Durability):持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。
 
写这些概念呢,是有点绕!绕就绕吧!反正也不是我规定的,这是官方的,解释是我编的!!!
 
事务的并发访问问题
 
如果我们在不考虑隔离性问题时,事务是存在三种并发访问问题的。
 
1.脏读:在一个事务中,当读取数据时,读到了另一个事务未提交的数据。  
 
比如A账户给B账户转了1块钱,但是A没有提交事务,被B账户通过脏读看到了,这时,B就会以为A已经把钱转过来了,但是这时,A账户回滚事务。其实钱就没给B转过去,但是B自己本身以为A已经转过去了,,,有点绕,估计是我描述到绕!
 
看代码:
 
update account set money=money+1 where name='B';  --此时A去通知B
update account set money=money -1 where name='A';
2.不可重复读:在一个事务中,两次读取的数据内容不一致,这是因为在查询时,有时间间隔,数据被另一个事务已经修改提交了,那就会出现问题。
 
3.幻读/虚读:在一个事务中,两次读取的数据量不一致。
 
事务的隔离级别
 
上面介绍了3种事务并发问题!现在介绍一下数据库提供的解决方案!
 
1.read uncommitted : 读取尚未提交的数据 :这个最低级,但是效率肯定最高,但是哪一个问题都不能解决。
 
2.read committed:读取已经提交的数据 :可以解决脏读  。
 
3.repeatable read:重读读取:可以解决脏读 和 不可重复读 。
 
4.serializable:串行化:可以解决脏读不可重复读和虚读,效率最差,相当于锁表,开发中一般不用。
 
上面的“2”是oracle数据库默认设置,“3”是mysql数据库默认的设置。

(编辑:源码门户网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!