MySQL—事务

发布时间:2020-06-03 发布网站:脚本之家
价值2580元廖雪峰前端视频终终终于免费啦!
脚本之家收集整理的这篇文章主要介绍了MySQL—事务脚本之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

《MySQL—事务》要点:
本文介绍了MySQL—事务,希望对您有用。如果有疑问,可以联系我们。

MySQL — 事务

先来考虑一个实际的需求:

有一张“银行账户表”,现在我要让A用户给B用户转账.

此时正确的做法是:

A账户金额减少,B账户增加

此时,出现了紧急情况,设备断电,而断电的时间恰恰很巧:

A账户金额减少之后,B账户金额增加之前,发生了断电

因此,转账的金额就这么不知去向了

在“这个需求”中,我们面临继续办理的问题:

当一系连续的操作因为某些原因被打断以后出现了数据库的“纷歧致性”

“这个具体问题”解决办法是:

在一个单独的空间中,先上A账户金额减少,但此时不修改表.再让B账户金额增加,也不修改表.最后核对一下总金额与原表是否一样,如果一样则一次性修改表

事务机制

事务机制是专门用来办理上述问题的数据库机制,它可以保护相关联的操作一起完成,或者一起失败

  • 针对的对象:一系列,连续且相关的操作

  • 原子性:一系列连续且相关的操作必需同时成功或同时失败

  • 隔离性:当一个事务操作了表中的一行,那么在这个事务结束前,该行不能由其余会话操作

  • 意义:保证了数据库的完整性和一致性

  • 实现:上述所描述的“单独的空间”,其实是通过“事务日志”来实现的

无事务机制示例

为了能够让知识点直观,我们通过代码示例来演示“上述转账失败的过程”

1、创建相应的数据库

MySQL—事务

Python学习交流群:330637182

2、创建相应的表

MySQL—事务

Python学习交流群:330637182

3、插入相关数据

MySQL—事务

Python学习交流群:330637182

4、开始发工资(在没有事务机制的掩护下发生了断电)

MySQL—事务

Python学习交流群:330637182

5、再次进入数据库,查询相关的电子现金信息

MySQL—事务

Python学习交流群:330637182

idaccountnamebalance
11111111111111111111Tuple100.00
20000000000000000000TanzhouEdu9992320.00

此时出现了无法解救的损失,电子现金消失了

事务模式

  • 自动模式(默认)

心细的同学会发现,默认情况下,我们如果向MySQL发送一条修改数据库的命令,命令执行完成后会立即修改数据库表.就像上述案例中的 UPDATE my_account SET balance=balance-7680 WHERE id=2; 一样.

此时,数据库将每一条命令当成一个单独的事务.

如果我们想要在“自动模式”下,使用“事务”,那么我们必需使用如下几个命令:

MySQL—事务

Python学习交流群:330637182

注意:一旦我们“提交”,或者“回滚”了事务,那么就视为事务结束.在事务结束的情况下,再“提交”,或者“回滚”是没有意义的

  • 手动模式

事务机制示例

这次,我们在“事务自动模式下”手动开始一个事务,并利用这个来完成我们转账的效果.

注意:为了保证演示效果,我们必要同时连接两个MySQL终端(会话),分别为S1和S2.

MySQL—事务

Python学习交流群:330637182

1、在S1中,开启自定义新事务

MySQL—事务

Python学习交流群:330637182

2、在S1中,开始发工资(暂时任然只做到停电前那一步)

MySQL—事务

Python学习交流群:330637182

但是我们在S2中查看金额

MySQL—事务

Python学习交流群:330637182

idaccountnamebalance
11111111111111111111Tuple100.00
20000000000000000000TanzhouEdu9992320.00

发现,在S2中并不克不及看到S1中所做的改变.

3、接下来我们把从潭州教育财务卡中拿出的金额给Tuple老师,并提交这一系列相关的操作

MySQL—事务

Python学习交流群:330637182

4、此时我们再使用

MySQL—事务

Python学习交流群:330637182

idaccountnamebalance
11111111111111111111Tuple7780.00
20000000000000000000TanzhouEdu9984640.00

我们发现,此时,S2才能看到这其中的修改,否则对S1的任何修改都弗成见.

这个过程中,只要我们“手动开始了一个自定义新事务”,当这个事务提交前,这个操作是放在“事务日志”中的,并不会真的影响到我们的数据库,只有当我们提交的以后才会真的修改我们的数据表.

喜欢python或者想学习python的朋友可以加QQ群:330637182!群内每天会更新python材料,还有大牛指导哟!

欢迎参与《MySQL—事务》讨论,分享您的想法,脚本之家PHP学院为您提供专业教程。

总结

以上是脚本之家为你收集整理的MySQL—事务全部内容,希望文章能够帮你解决MySQL—事务所遇到的程序开发问题。

如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢交流学习经验,点击链接加入脚本之家官方QQ群:1065694478