标签:事务 Transaction 读取 -- 回滚 Mysql 操作 数据
事务
概述:
事务是实际开发中,比较常见业务逻辑操作中都会存在问题,比如转账的业务,需要将一个账户的钱转向到另一个账号,此时会涉及到两个修改操作:A账户钱减少,B账户钱增加;这两个操作要保证能同时成功或者同时失败,那么这一个业务需求(逻辑单元)就称之为一个事务。
事务特性:
1.原子性: 对于事务中的多次更新操作要么同时成功,要么同时失败
2.一致性:保证事务操作完成之后,所有的结果一致
3.隔离性:事务之间各自独立存在互相不影响
4.持久性:事务完成之后,确保所有的数据长期持久的存在
Mysql事务的使用:
ps:mysql中只有使用InnoDB引擎才能支持事务;MyISAM引擎不支持事务
参考代码:
-- 开启事务(事务一旦开,后续的所有更新操作都在这个事务中,直到提交后才会对物理表产生影响)
start transaction;
-- 设置保存点(在当前位置设置保存点,通过rollback to 保存点,可以回滚到该位置)
savepoint p1;
-- 回滚保存点(回滚到指定的保存点:一旦回滚,则当前保存点会撤销)
rollback to p1;
-- 回滚到事务开始的位置
rollback;
-- 提交事务
commit;
事务隔离级别:
由于实际的业务操作可能会涉及到很多事务的并发操作,因此在事务并发时可能会遇到一下问题:
-
丢失更新:撤消一个事务时,把其它事务已提交的更新的数据覆盖了。
-
脏读:事务A读取了事务B更新的数据,而此时事务B并未提交,那么A读取到的数据是脏数据
脏数据
-
不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新
并提交,导致事务A多次读取同一数据时,结果 不一致。 -
幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B
就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有
改过来,就好像发生了幻觉一样,这就叫幻读。
对于以上可能出现的问题,数据库中引入事务隔离级别的解决方案:
以上是解决事务并发问题的方案,其中隔离级别从低到高,对数据操作的效率影响从低到高;Mysql中默认的隔离级别是:repeatable-read
标签:事务,Transaction,读取,--,回滚,Mysql,操作,数据 来源: https://blog.csdn.net/weixin_51877577/article/details/110878104
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。