mysql事物处理

本文介绍了MySQL中的事务,包括其ACID特性、存储引擎对比、事务使用步骤及一个转账的PHP实例。重点讲解了InnoDB引擎对事务的支持,以及如何通过开始、提交和回滚操作确保数据的一致性。
摘要由CSDN通过智能技术生成
1、什么是mysql中的事务? 事务就是包含一组不可分了的mysql单元,简而言之就是一组连贯的SQL操作 2、事务有什么特征呢? 以下特性简称为 :ACID 原子性(atom):确保工作单元内的所有操作都成功完成,否则事务将被中止在故障点,和以前的操作将回滚到以前的状态 一致性(consistent): 确保数据库正确地改变状态后,成功提交的事务
隔离性(insulate): 使事务操作彼此独立的和透明的
持久性(durable): 确保提交的事务的结果或效果的系统出现故障的情况下仍然存在
3、如果想让一张表支持事务,那么这张表的存储引擎必须是innodb,mysql的存储引擎分为:
MyISAM:它不支持事务,也不支持外键,尤其是访问速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用基本都可以使 用这个引擎来创建表。每个MyISAM在磁盘上存储成3个文件,其中文件名和表名都相同,但是扩展名分别为:
.frm(存储表定义) MYD(MYData,存储数据) MYI(MYIndex,存储索引) InnoDB :InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比MyISAM的存储引擎,InnoDB写的处理效率 差一些并且会占用更多的磁盘空间以保留数据和索引 MEMORY:memory使用存在内存中的内容来创建表。每个MEMORY表实际对应一个磁盘文件,格式是.frm。MEMORY类型的表访问 非常快,因为它到数据是放在内存中的,并且默认使用HASH索引,但是一旦服务器关闭,表中的数据就会丢失,但表还会继续存在。 4、mysql事务的使用步骤:    ① 开启事务   start transaction   或者  begin   ② 写sql  假设一个场景A向B转账 1000   update 表名 set 金额=金额-1000 where name='A'   update 表名 set 金额=金额+1000 where name='B'
   ③ 判断sql是否执行成功(其实就是判断sql的执行受影响行数),如果成功:      commit; 提交完成整个事务的处理过程,才会真正的进行修改数据    如果有一个sql执行失败,那么事务将进行回滚操作:rollback   回滚操作就是说明这组sql中有一个没完成,那么所有数据都不会进行 更新
5、实例操作:现在用户张三通过手机转账向李四转钱1000元:
<?php
// 实 例 化 P D O 对 象
$dsn="mysql:host=127.0.0.1;dbname=test" "mysql:host=127.0.0.1;dbname=test";
$db=new new PDO($dsn,'root' 'root','root' 'root');
 try{    // 开 启 事 务 :  
  $db->beginTransaction();
     // 定 义 一 个 变 量 , 来 记 录 s q l 影 响 的 行 数  
    $row = null null;  
      // 写 s q l    
    $row = $db->exec("update user set money=money-1000 where id=1" "update user set money=money-1000 where id=1");  
      // 判 断 付 款 人 是 否 付 款 成 功    
     if (!$row)
        {        throw new throw new PDOException('扣款失败!您的账户可能余额不足!' '扣款失败!您的账户可能余额不足!');   
        }   
        $row = $db->exec("update user set money=money+1000 where id=3" "update user set money=money+1000 where id=3");
    // 判 断 接 收 人 事 故 正 常 接 受 到 款 项    
     if (!$row) {        throw new throw new PDOException('对方账户有问题,转账失败!' '对方账户有问题,转账失败!');    }   
     $db->commit(); // 提 交 事 务   
      echo echo "转账成功!" "转账成功!"; }catch catch (PDOException $content) {    
      // 执 行 失 败 , 事 务 回 滚  
        $db->rollback();   
   exit($content->getMessage());
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值