设为首页 收藏本站
查看: 1327|回复: 0

[经验分享] MySQL的事务的处理

[复制链接]

尚未签到

发表于 2017-12-13 14:09:39 | 显示全部楼层 |阅读模式
  步骤:
  1.开启事务 start transaction
  当我们开启一个事务的时候,我们对sql的操作都发生在内存中,但是没有真正的反馈到数据库磁盘的文件中!
  2.回滚 rollback
  回滚,就是恢复到事务开启之前的最原始的状态!
  注意:回滚操作会自动的关闭一个事务,如果想再次执行事务,需要重新开启事务!
  3.提交 commit

事务的基本原理
  普通的执行,之所以是立即执行并生效,因为默认的,MySQL对sql语句的执行是自动提交的!所以,开启一个事务的本质,就是关闭了以前的自动提交的功能,而是由用户手动提交(利用commit语句)!
  总结事务的步骤:
  1,  开启事务
  2,  如果执行成功,就提交commit
  3,  如果有任何一条sql语句执行失败,则回滚rollback!
  事务处理最典型的就是借还钱。下面以张三向李四还1000元为例
  首先查看数据库中各自的钱数
DSC0000.png

  下面是处理还钱事务的代码:
  

<?php  

  

/**  
* MySQL实现事务操作
  

*/  

  
echo "<meta >";
  

  
// 1 连接数据库
  
$link = @('localhost','root','') or die('连接数据库失败');
  
('test',$link);
  
('set names utf8');
  

  
// 2  开启事务
  
("start transaction");
  
//设置一个变量,用来判断所有sql语句是否成功
  
$flag = true;
  

  
// 2.1执行事务中的一组sql语句
  
// 李四的money+1000
  
$sql = "update pdo set mone=money+1000 where name='李四'";
  
$res = ($sql);
  
if (!$res) {
  //若sql语句执行失败,把$falg设置为false
  $flag = false;
  
}
  

  
//张三的money-1000
  
$sql = "update pdo set money=money-1000 where name='张三'";
  
$res = ($sql);
  
if (!$res) {
  //若sql语句执行失败,把$falg设置为false
  $flag = false;
  
}
  

  
// 2.2 判断事务是否执行成功
  
if ($flag) {
  //所有sql语句执行成功,把sql语句提交
  ('commit');
  echo "还钱成功!";
  
}else{
  // 如其中一条执行失败,则回滚到事务开启之前的状态
  ('rollback');
  echo "还钱失败!";
  
}
  

  结果:
DSC0001.png

DSC0002.png

  下面,我们故意把其中一个字段写错,看看事务是否正常处理,数据库中的钱数是否有变化!
  

// 李四的money+1000  
$sql = "update pdo set mone=money+1000 where name='李四'";  //把moeny字段错写成mone
  

  结果:
DSC0003.png

DSC0004.png

  结果是还钱失败,并且数据库中各自的钱数没有变化,说明当某一条语句未执行成功时,事物不会提交,而会回滚,把数据恢复到开始事务之前的原始状态,这也是使用事务的作用,即只有当事务中所有sql语句全部执行成功,事务才会提交,否则会回滚!
  下篇会介绍PDO中事务处理

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-423670-1-1.html 上篇帖子: mysql基础篇 下篇帖子: MySQL原生API、MySQLi面向过程、MySQLi面向对象、PDO操作MySQL
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表