zoukankan      html  css  js  c++  java
  • mysql 事务

    事务用于将某些操作的多个SQL作为原子性操作,一旦有某一个出现错误,即可回滚到原来的状态,从而保证数据库数据完整性。

    现实生活中理解列子:

        去银行转钱,从一个账户向另一个账户转钱,大体流程,先在一个账户上扣钱,然后再在另一个账户上加钱,但是当在一个账户上扣完钱往另一个账户上加钱的过程中因为某些原因导致系统出问题,间接导致此次赚钱操作失败。

        既然失败了,操作不成功,那么两边账户的钱肯定就不会变化,但是这里就有一个问题了,故障是出在一个账户扣完钱之后的,意思就是一个账户上的钱已经被操作了,那在出了问题之后怎么执行操作,让扣完钱的账户上的钱,返回初始状态?

        这里就的使用事物,当检测两边操作一旦某个出现错误,即可 回滚 到操作之前的初始状态。


    一、mysql事务

    delimiter $$
    create PROCEDURE p1(
        OUT p_return_code tinyint
    )
    BEGIN
      DECLARE exit handler for sqlexception
      BEGIN
        -- ERROR 
        set p_return_code = 1;
        rollback;
      END;
    
      DECLARE exit handler for sqlwarning
      BEGIN
        -- WARNING 
        set p_return_code = 2;
        rollback;
      END;
    
      START TRANSACTION;
        DELETE from tb1;
        insert into tb2(name)values('seven');
      COMMIT;
    
      -- SUCCESS 
      set p_return_code = 0;
    
      END $$
    delimiter ;
    支持事务的存储过程

    执行代码:

    set @i =0;
    call p1(@i);
    select @i;

    说明:

    1、代码中失误的执行是在存储过程内部。START TRANSACTION; 就表示开始执行事务。

    image


    2、rollback就是回滚的意思。回滚操作就会让数据回到操作之前的状态。

    3、执行存储过程,传入参数的时候 out 定义的参数, 可以不传,但是如果要传,必须传一个变量,用于接收返回值。其他值会报错。


    二、pymysql 事务

    pymysql默认就支持事务的。

    直接通过 cursor.execute() 执行sql语句,在方法内部就已经默认支持 事务 的操作。

  • 相关阅读:
    Java中的LinkedList
    Java中的List集合
    Java中的集合Collection
    Java中的异常
    mvc+EF实现简单的登陆功能
    ASP.NET MVC学习三-数据传递之模型绑定
    ASP.NET MVC学习二之 Controller
    ASP.NET MVC 学习一之路由
    ASP.NET MVC学习
    winform获取网页代码的两种方式:
  • 原文地址:https://www.cnblogs.com/jayafs/p/7594822.html
Copyright © 2011-2022 走看看