zoukankan      html  css  js  c++  java
  • 跟着百度学PHP[14]-PDO之Mysql的事务处理1

      事务处理:在实际案例当中干一件事的mysql语句(好比转账,小一同学转账100,小二同学收账,在mysql当中小一就要减去转账的钱,小二就要增加100快)倘若该语句执行过程中有任何一条的sql语句出错那么就将该件事情的sql语句全部撤销。这就叫事务处理。

    mysql中常用的表类型有两种:

      1.mylsam 非事务  特点:增删改速度快

      2.InnodB  事务型  特点:安全性高

    mysql默认的是mylsanm,所以我们使用mysql的事务处理就需要将默认的改为InnodB类型。

    我们先来创建一个innodb类型的表。

    mysql> create table demo(
        -> id int not null auto_increment primary key,
        -> username char(50),
        -> yue double)
        -> engine=innodb; //将引擎设置为innodb,engine英译为:引擎
    Query OK, 0 rows affected (0.20 sec)

    此时我插入两条数据:(PS:此时还没有进行开启自动提交,所以数据不会自动提交。)

    mysql> insert into demo(id,username,yue) values(1,'zhangsan',100);
    Query OK, 1 row affected (0.00 sec)
    
    mysql> insert into demo(id,username,yue) values(2,'lisi',120);
    Query OK, 1 row affected (0.00 sec)

    在mysql默认当中执行sql语句是自动提交的,比如insert into demo(id,username,yue) values(1,"admin",1000);执行了以后就直接自动提交。我们要进行事务处理就需要做以下步骤

    1.先将自动提交给关闭

    mysql> set autocommit=0; //auto英译为自动,commit英译为提交、推送。0为关闭,1为开启。
    Query OK, 0 rows affected (0.00 sec)

    2.开启事物处理

    mysql> start transaction; //trasaction英译为处理。
    Query OK, 0 rows affected (0.00 sec)

    如此便OK了。

    假设我们现在zhangsan同学用余额转账转了十块钱给李四然后,那么就会执行两条sql语句,一条是将张三同学的余额减掉十元钱,第二个是将李四余额加十元。

    mysql> update demo set yue = 90 where username = 'zhangsan';
    Query OK, 1 row affected (0.08 sec)
    Rows matched: 1  Changed: 1  Warnings: 0

    将设此时因为系统错误,李四没有收到张三转账的十元。那么就可以使用rollback进行撤回。

    mysql> select * from demo;
    +----+----------+------+
    | id | username | yue  |
    +----+----------+------+
    |  1 | zhangsan |  100 |
    |  2 | lisi     |  120 |
    +----+----------+------+
    2 rows in set (0.00 sec)
    
    mysql> update demo set yue = 90 where username = 'zhangsan';
    Query OK, 1 row affected (0.00 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    
    mysql> select * from demo;
    +----+----------+------+
    | id | username | yue  |
    +----+----------+------+
    |  1 | zhangsan |   90 |
    |  2 | lisi     |  120 |
    +----+----------+------+
    2 rows in set (0.00 sec)
    
    mysql> rollback;
    Query OK, 0 rows affected (0.05 sec)
    
    mysql> select * from demo;
    +----+----------+------+
    | id | username | yue  |
    +----+----------+------+
    |  1 | zhangsan |  100 |
    |  2 | lisi     |  120 |
    +----+----------+------+
    2 rows in set (0.00 sec)

    在没有使用commit提交之前都是可撤回的。因为数据并没有提交。

    如果要提交就用commit命令。即可。

  • 相关阅读:
    String painter HDU
    GCD Counting-树形DP
    XOR UVALive
    BZOJ-9-3295: [Cqoi2011]动态逆序对
    E
    Stars HDU
    二维单调队列(理想的正方形+修筑绿化带)
    P3622 [APIO2007]动物园
    COJ1160[一本通 5.3 例 1」Amount of Degrees
    [ZJOI2008]骑士
  • 原文地址:https://www.cnblogs.com/xishaonian/p/6426687.html
Copyright © 2011-2022 走看看