MySQL事务

mysql 事务

  • 写在存储过程中的事务是一组数据库操作,只有这些操作全都执行成功事务才会commit,只要有一句出错就rollback。(就像你去银行转账给你朋友700块钱,在转账的这个操作中你账户里的钱少了700,那么你朋友的账户就应该增加700块,这些减少和增加操作都执行成功后系统才会提交;否则就会回滚结束事务,不可能你账号的钱少了700,而你朋友的账户却没有收到这些钱。)

  • 创建存储过程,新建函数的时候选择过程即可。

    1. 带事务的存储过程,可以回滚,这样可以防止多条sql执行时,前面的执行成功后面的出错,造成数据丢失。

    2. 模板:没有细分错误,只要有问题就回滚

      BEGIN
      DECLARE t_error INTEGER DEFAULT 0;  
          -- declare CONTINUE handler FOR SQLEXCEPTION set t_error = 1;
          declare continue handler for sqlexception, sqlwarning, not found set t_error=1;
          SET AUTOCOMMIT = 0;
          START TRANSACTION;
      pro_block: BEGIN
              (要执行的sql语句,以分号分隔)
      
          end pro_block;
      --  如果没有错误就提交事务,否则回滚    
      IF (t_error = 0) THEN
          -- 提交事务
          COMMIT;
      ELSE
      -- 回滚事务
              ROLLBACK;
          END IF;
      -- 设置为自动提交
          SET AUTOCOMMIT = 1;
          SET rt = t_error;
      END
      
  • 事务的特性:
    事务有以下四个标准属性的缩写ACID,通常被称为:

    1. 原子性: 确保工作单元内的所有操作都成功完成,否则事务将被中止在故障点,和以前的操作将回滚到以前的状态。

    2. 一致性: 确保数据库正确地改变状态后,成功提交的事务。

    3. 隔离性: 使事务操作彼此独立的和透明的。

    4. 持久性: 确保提交的事务的结果或效果的系统出现故障的情况下仍然存在。

你可能感兴趣的:(mysql)