zoukankan      html  css  js  c++  java
  • 事务

    1.概念 

     开启事务的语句,具体如下

     提交事务的语句,具体如下:

     

     回滚事务的语句,具体如下:

     例子:

    mysql> CREATE TABLE account( id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(40),money FLOAT)ENGINE=InnoDB;

    Query OK, 0 rows affected

    mysql> INSERT INTO account(name,money) VALUES("a",1000),("b",1000);

    Query OK, 2 rows affected

    Records: 2  Duplicates: 0  Warnings: 0

    注意: 在句子的最后要加引擎ENFINE=InnoDB,否则可能会导致后面操作不成功


    mysql>  START TRANSACTION; UPDATE account SET money=money-100 WHERE name="a"; UPDATE account SET money=money+100 WHERE name="b";COMMIT;

    Query OK, 0 rows affected

    Query OK, 1 row affected

    Rows matched: 1  Changed: 1  Warnings: 0

    Query OK, 1 row affected

    Rows matched: 1  Changed: 1  Warnings: 0

    Query OK, 0 rows affected

    注意: 几个句子要写在一起,否则可能会导致后面操作不成功

    mysql> SELECT *FROM account;

    +----+------+-------+

    | id | name | money |

    +----+------+-------+

    |  1 | a    |   900 |

    |  2 | b    |  1100 |

    +----+------+-------+

    2 rows in set

     2:事务的提交

     

     下面就在之前的基础上开启一个事务,用UPDATE语句实现由b账户向a账户转100元的转账功能

    mysql> START TRANSACTION;

        UPDATE account SET money=money+100 WHERE name="a";

        UPDATE account SET money=money-100 WHERE name="b";

    Query OK, 0 rows affected

    Query OK, 1 row affected

    Rows matched: 1  Changed: 1  Warnings: 0

    Query OK, 1 row affected

    Rows matched: 1  Changed: 1  Warnings: 0

    没有使用COMMIT语句,所以并没有提交事务

    mysql> SELECT *FROM account;

    +----+------+-------+

    | id | name | money |

    +----+------+-------+

    |  1 | a    |  1000 |

    |  2 | b    |  1000 |

    +----+------+-------+

    2 rows in set

     此时再打开另一个命令界面,查询数据库中各账户余额信息

    mysql> SELECT *FROM account;

    +----+------+-------+

    | id | name | money |

    +----+------+-------+

    |  1 | a    |   900 |

    |  2 | b    |  1100 |

    +----+------+-------+

    2 rows in set

    可以看到没有提交事务,只是自己的账户变了,而在别的的账户下查这些信息是没有任何变化的,还是原来的余额。

    在原来第一个账户的基础上做下一个回滚实验,具体操作如下:

    mysql> ROLLBACK;

    Query OK, 0 rows affected

    mysql> SELECT *FROM account;

    +----+------+-------+

    | id | name | money |

    +----+------+-------+

    |  1 | a    |   900 |

    |  2 | b    |  1100 |

    +----+------+-------+

    2 rows in set

    注意:没有提交事务的话,是可以回滚的,还可以变为未执行这次操作之前的账户余额

     3:事务的隔离级别

     

     

  • 相关阅读:
    四层架构设计实践
    看看node.js chat程序如何实现Ajax longpolling长链接刷新模式
    模仿igoogle【定制化、拖动排序,最大化、分屏】
    安装和配置Apache
    好书推荐《Pro ASP.NET MVC 3 Framework 3rd Edition》
    GAC和VS引用的程序集不一致?
    不要在 ASP.NET 4.5 Beta 的 Page 类事件上直接使用 async 与 await
    使用事务自动回滚来实现单元测试
    C# 如何异步查询数据库
    Linq + Jquery + Ajax 实现异步分页,批量删除,单个删除,全选,反选 ……
  • 原文地址:https://www.cnblogs.com/wom1999/p/12059192.html
Copyright © 2011-2022 走看看