MySQL—事务

MySQL—事务,第1张

概述介绍《MySQL—事务》开发教程,希望对您有用。

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

MysqL — 事务

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

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

此时正确的做法是:

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

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

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

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

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

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

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

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

事务机制

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

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

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

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

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

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

无事务机制示例

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

1、创建相应的数据库

Python学习交流群:330637182

2、创建相应的表

Python学习交流群:330637182

3、插入相关数据

Python学习交流群:330637182

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

Python学习交流群:330637182

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

Python学习交流群:330637182

IDaccountnamebalance
11111111111111111111Tuple100.00
20000000000000000000TanzhouEdu9992320.00

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

事务模式

自动模式(默认)

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

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

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

Python学习交流群:330637182

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

手动模式

事务机制示例

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

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

Python学习交流群:330637182

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

Python学习交流群:330637182

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

Python学习交流群:330637182

但是我们在S2中查看金额

Python学习交流群:330637182

IDaccountnamebalance
11111111111111111111Tuple100.00
20000000000000000000TanzhouEdu9992320.00

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

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

Python学习交流群:330637182

4、此时我们再使用

Python学习交流群:330637182

IDaccountnamebalance
11111111111111111111Tuple7780.00
20000000000000000000TanzhouEdu9984640.00

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

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

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

欢迎参与《MysqL—事务》讨论,分享您的想法,内存溢出PHP学院为您提供专业教程。

总结

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

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1158028.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存