zoukankan      html  css  js  c++  java
  • mysql-进阶 事物

    事物,说白了就是将多条sql语句绑定到一起,如果其中有一条不能执行就这些sql全部终止,使用它的典型就是涉及金钱转账方面的操作;

    支持事物的有 InoDB,BDB和NDB

    MyISAM不支持

    查看所用mysql 支持数据库命令

    show engines

    修改表引擎

    alter table xxx engine=innodb;

    开启事物就要关闭mysql的自动提交

    start transaction; 或者 begin;

    关闭自动提交: set autocommit=0;

    开启自动提交: set autocommit=1;

    ps:

    用start transaction; 和set autocommit=0; 的区别就是前者在发送commit命令后依然是自动提交 而后者需要手动开启

    set autocommit、commit、begin、alter、create、rollback、等命令会自动提交事务

    下面进行实际操作:

    首先创建一张银行表

    create table bank(
        bid int unsigned primary key auto_increment,
        name char(20) not null default '',
        money decimal(6,2) unsigned not null default 0
    );

    插入两条信息

    insert into bank (name,money) values ('A先生',1000),('B先生',0);

    开启事务(完整,成功的时候)
    begin;
    关闭自动提交
    set autocommit=0;
    先减去500
    update bank set money=money-500 where bid=1;
    加上500
    update bank set money=money+500 where bid=2;
    提交       回滚
    commit;/rollback;

    如果不成功,就将上面的 commit; 换成 rollback;回滚操作

    在php中利用pdo进行操作演示

     1 <?php 
     2 $dsn = "mysql:host=127.0.0.1;dbname=测试数据库名";
     3 try{
     4     //连接PDO
     5     $pdo = new Pdo($dsn,'root','');
     6     //设置异常错误
     7     $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
     8     //设置字符集
     9     $pdo->query('SET NAMES UTF8');
    10     //开启事务
    11     $pdo->query("BEGIN");
    12     //关闭自动提交
    13     $pdo->query("SET AUTOCOMMIT=0");
    14     //1.扣钱
    15     $pdo->exec("UPDATE bank SET money=money-500 WHERE bid=1");
    16     //2.加钱
    17     $pdo->exec("UPD1ATE bank SET money=money+500 WHERE bid=2");
    18     //提交
    19     $pdo->query("COMMIT");
    20 
    21 }catch(PDOException $e){
    22     //如果有错误则回滚,撤销之前的操作
    23     $pdo->query('ROLLBACK');
    24     echo '<span style="color:red">' . $e->getMessage() . '</span>';
    25 }
    26 
    27 
    28 ?>

    这样的话,当try括号中的sql命令出错的话就进行下面的回滚操作,保证这两条sql都能成功

  • 相关阅读:
    .Net 多线程小结
    VIM 入门操作
    C语言中的数据
    对scanf和printf的研究!!
    C语言常用的编程规范
    ORACLE GOLDEN GATE oracle同步数据至kafka
    mysql5.7关于使用到OR是否会用到索引并提高查询效率的探讨
    sysbench安装
    percona数据库监控工具的安装部署
    redhat6 快速部署percona
  • 原文地址:https://www.cnblogs.com/gaofeifiy/p/5052250.html
Copyright © 2011-2022 走看看