zoukankan      html  css  js  c++  java
  • 事务

    事务

    要么都成功 要么都失败


    1. SQL 执行 A给B转账 A 1000 --> 200 B 200
    2. SQL 执行 B收到A的钱 A 800 B 400

    将一组SQL放在一个批次去执行

    事务原则: ACID 原子性,一致性,隔离性,持久性 (脏读,幻读...)

    参考博客链接: https://blog.csdn.net/dengjili/article/details/82468576

    原子性(Atomicity)

    要么都成功,要么都失败

    一致性(Consistency)

    事务前后数据的完整性必须保持一致。

    隔离性(Isolation)

    事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。

    持久性(Durability)

    事务一旦提交不可逆,被持久化到数据库中

    执行事务

    -- mysql 是默认开始事务自动提交的
    
    SET autocommit = 0 /*关闭*/
    SET autocommit = 1 /*开启 默认的*/
    
    -- 手动处理事务
    SET autocommit = 0 -- 关闭自动提交
    -- 事务开启
    START TRANSACTION -- 标记一个事务的开始,从这个之后的SQL  都在同一个事务内
    
    -- 提交: 持久化
    COMMIT
    -- 回滚: 回到原来的样子
    ROLLBACK
    -- 事务结束
    SET autocommit = 1 -- 开启自动提交
    
    -- 了解
    SAVEPOINT -- 设置一个事务的保存点
    ROLLBACK TO SAVEPOINT
    RELEASE SAVEPOINT
    

    模拟转账

    CREATE TABLE `account` (
      `id` INT NOT NULL AUTO_INCREMENT,
      `name` varchar(30) NOT NULL,
    	`money` DECIMAL(9, 2) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=INNODB DEFAULT CHARSET=UTF8
    
    insert into `account`(`name`,`money`) values ('A', 2000.00), ('B', 10000.00)
    
    -- 模拟转账
    SET autocommit = 0 -- 关闭自动提交
    START TRANSACTION -- 开始事务
    UPDATE account SET money=money-500 WHERE name = 'A' -- A - 500
    UPDATE account SET money=money+500 WHERE name = 'B' -- B + 500
    COMMIT -- 提交事务
    -- ROLLBACK -- 回滚
    SET autocommit = 1 -- 恢复默认值
    
  • 相关阅读:
    LeetCode 226. Invert Binary Tree
    LeetCode 221. Maximal Square
    LeetCode 217. Contains Duplicate
    LeetCode 206. Reverse Linked List
    LeetCode 213. House Robber II
    LeetCode 198. House Robber
    LeetCode 188. Best Time to Buy and Sell Stock IV (stock problem)
    LeetCode 171. Excel Sheet Column Number
    LeetCode 169. Majority Element
    运维工程师常见面试题
  • 原文地址:https://www.cnblogs.com/menglingxu/p/13891081.html
Copyright © 2011-2022 走看看