mysql的事务处理

看一个实际情况

有一张银行账号表

create table account

(id int primary key,

balance float);

现在有一段php程序, 要完成 把 1号 10 元钱,转到 2号账号上

<?php
    $mysqli=new MySQLi("localhost","root","hsp123","test");
    if($mysqli->connect_error){
        die($mysqli->connect_error);
    }
    $sql1="update account set balance=balance-2 where id=1";
    $sql2="update account2 set balance=balance+2 where id=2";
    $b1=$mysqli->query($sql1) or die($mysqli->error);
    $b2=$mysqli->query($sql2) or die($mysqli->error);
    if(!$b1||!$b2){
        echo "失败";
    }else{
        echo "成功";
    }
    $mysqli->close();
?>

这时,我们需要有一种方法来控制两句sql语句同时成功,同时失败.

->事务

事务

基本:事务用于保证数据的一致性,它由一组相关的dml语句组成,该组的dml语句要么全部成功,要么全部失败。如:网上转账就是典型的要用事务来处理,用以保证数据的一致性

现在我们使用事务来完成上面的代码

<?php

    $mysqli=new MySQLi("localhost","root","hsp123","test");
    if($mysqli->connect_error){
        die($mysqli->connect_error);
    }

    //将提交设为false[事务一旦提交就没有机会回滚.]
    $mysqli->autocommit(false);
    //-> savepoint a;会把但前情况记录
    $sql1="update account set balance=balance-2 where id=1";
    $sql2="update account2 set balance=balance+2 where id=2";

    $b1=$mysqli->query($sql1) ;
    $b2=$mysqli->query($sql2) ;

    if(!$b1||!$b2){
        echo "失败,回滚".$mysqli->error;
        //回滚!
        $mysqli->rollback();
    }else{
        //提交 [一旦提交没有机会回滚]
        $mysqli->commit();
    }
    $mysqli->close();
    //显示控制台
?>    

? 在mysql控制台可以使用事务来操作,具体步骤如下

  1. 开启一个事务

start transaction

  1. 做保存点

savepoint 保存点名称

  1. 操作....
  2. 可以回滚,可以提交

4.1 如果没有问题提交

commit

4.2 如果你觉得有问题,就回滚

rollback to 保存点.

u 事务的acid特性

原子性,一致性,持久性,隔离性.

时间: 2024-10-11 22:21:35

mysql的事务处理的相关文章

mysql的事务处理与锁表

数据库的事务处理可以保证一组处理结果的正确性.mysql中只有INNODB和BDB引擎的数据表才支持事务处理,对于不支持事务的MyISAM引擎数据库可以使用表锁定的方法来实现相同的功能. mysql的事务处理主要有两种方法来实现. 1.用begin,rollback,commit来实现. begin 开始一个事务 rollback 事务回滚 commit 事务确认 Php代码 $conn = mysql_connect('localhost','root','root') or die ("数据

关于MySQL的事务处理及隔离级别

原文地址 :http://blog.sina.com.cn/s/blog_4c197d420101awhc.html 事务是DBMS得执行单位.它由有限得数据库操作序列组成得.但不是任意得数据库操作序列都能成为事务.一般来说,事务是必须满足4个条件(ACID) 原子性(Autmic):事务在执行性,要做到“要么不做,要么全做!”,就是说不允许事务部分得执行.即使因为故障而使事务不能完成,在rollback时也要消除对数据库得影响! 一致性(Consistency):事务操作之后,数据库所处的状态

MySQL存储过程事务处理

BEGIN DECLARE t_error INTEGER DEFAULT 0; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1; START TRANSACTION; #这边放sql语句,涉及到的表必须都为InnoDB IF t_error = 1 THEN ROLLBACK; ELSE COMMIT; END IF; END 转自:http://www.cnblogs.com/bossikill/p/3682839.html  

mysql 事务处理

知识点: 事务处理是什么? 当数据库表呈树状机构设计时,我们对一个表进行增.删.改的操作,可能会要求对另外的表进行相同的操作,为了保证这多个sql能同时执行成功,就要使用mysql的事务处理. 注意:只有增删改的操作可以进行回滚,alter等操作不可行! 事务特性: 1.原子性:所有的sql执行操作必须全部成功,否则则回滚到处理前状态 2.一致性: 确保数据库正确地改变状态后,成功提交的事务. 3.隔离性: 使事务操作彼此独立的和透明的. 4.持久性: 确保提交的事务的结果或效果的系统出现故障的

mysql事务处理用法与实例详解

MySQL的事务支持不是绑定在MySQL服务器本身,而是与存储引擎相关1.MyISAM:不支持事务,用于只读程序提高性能 2.InnoDB:支持ACID事务.行级锁.并发 3.Berkeley DB:支持事务 一个事务是一个连续的一组数据库操作,就好像它是一个单一的工作单元进行.换言之,永远不会是完整的事务,除非该组内的每个单独的操作是成功的.如果在事务的任何操作失败,则整个事务将失败. 实际上,会俱乐部许多SQL查询到一个组中,将执行所有的人都一起作为事务的一部分. 事务的特性: 事务有以下四

PHP与MYSQL事务处理

PHP与MYSQL事务处理 2016-03-28 fal PHP编程 MYSQL的事务处理主要有两种方法. 1.用begin,rollback,commit来实现 begin 开始一个事务 rollback 事务回滚 commit 事务确认 2.直接用set来改变mysql的自动提交模式 MYSQL默认是自动提交的,也就是你提交一个QUERY,它就直接执行!我们可以通过 set autocommit=0 禁止自动提交 set autocommit=1 开启自动提交 来实现事务的处理. 当你用 s

PHP对MYSQL数据库进行事务处理及表锁定

MYSQL的事务处理主要有两种方法: 1.用begin,rollback,commit来实现   begin 开始一个事务   rollback 事务回滚   commit 事务确认 2.直接用set来改变mysql的自动提交模式 MYSQL默认是自动提交的,也就是你提交一个QUERY,它就直接执行!我们可以通过   set autocommit=0 禁止自动提交   set autocommit=1 开启自动提交 来实现事务的处理. 当你用 set autocommit=0 的时候,你以后所有

mysql事务处理的意义

MySQL的事务支持不是绑定在MySQL服务器本身,而是与存储引擎相关 1.MyISAM:不支持事务,用于只读程序提高性能 2.InnoDB:支持ACID事务.行级锁.并发 3.Berkeley DB:支持事务  一个事务是一个连续的一组数据库操作,就好像它是一个单一的工作单元进行.换言之,永远不会是完整的事务,除非该组内的每个单独的操作是成功的.如果在事务的任何操作失败,则整个事务将失败.实际上,会俱乐部许多SQL查询到一个组中,将执行所有的人都一起作为事务的一部分. 事务的特性: 事务有以下

[转]mysql事务处理用法与实例详解

转自:http://www.cnblogs.com/ymy124/p/3718439.html MySQL的事务支持不是绑定在MySQL服务器本身,而是与存储引擎相关1.MyISAM:不支持事务,用于只读程序提高性能 2.InnoDB:支持ACID事务.行级锁.并发 3.Berkeley DB:支持事务 一个事务是一个连续的一组数据库操作,就好像它是一个单一的工作单元进行.换言之,永远不会是完整的事务,除非该组内的每个单独的操作是成功的.如果在事务的任何操作失败,则整个事务将失败. 实际上,会俱