• 12事务


    事务是一组sql语句批量执行,要么全部执行成功,要么全部执行失败

    START TRANSACTION;#开启事务,关闭mysql自己的自动提交方式,仅限于本窗口
    
    UPDATE account SET money=money-1000 WHERE id=2;
    UPDATE account SET money=money+1000 WHERE id=1;
    
    COMMIT;    #提交当前事务
    #ROLLBACK 回滚当前事务

    原子性:对其数据的修改,要么全都执行,要么全都不执行

    一致性:原来怎样,现在还怎样

    隔离性:一个事务不能知道另一个事务的执行情况

    持久性

    只有Innodb数据库引擎的数据库或表才支持事务;

    事务控制语句

    BEGIN或START TRANSACTION; 显式地开启一个事务;

    SAVEPOINT : 保存点,可以把一个事物分割成几部分.在执行ROLLBACK 时 可以指定在什么位置上进行回滚操作.

    SAVEPOINT sa1;
    ...
    ROLLBACK TO sa1;

    当并发事务同时访问一个资源时,有可能导致数据不一致,因此需要一种机制来将数据访问顺序化,以保证数据库数据的一致性。

    用法是在事务中的查询语句最后面加上 FOR UPDATE。查询的时候后面的条件,如果表中有主键,那么锁定的是当前行的数据。如果没有主键,那么锁定的是整行表。

    START TRANSACTION;
    
    set @m=0;
    
    SELECT money into @m from account where id = 1 FOR UPDATE;
    
    select @m;
    
    -- 看到余额后 充值100 块
    update account set money = @m + 100 where id = 1;
    
    SELECT * from account;
    
    COMMIT;

    next

    START TRANSACTION;
    
    set @m=0;
    
    SELECT money into @m from account where id = 1 FOR UPDATE;
    
    select @m;
    
    -- 看到余额后 取款100 块
    update account set money = @m - 100 where id = 1;
    
    SELECT * from account;
    
    COMMIT;
  • 相关阅读:
    RabbitMQ 入门
    Spring boot 2.x 中使用redis
    spring boot 中 Cache 的使用
    vbs 入门
    移动端文本框被原生键盘弹出后挡住文本框
    HTML中添加音乐video embed audio
    input修改placeholder文字颜色
    vue中更换.ico图标报错路径找不到图片
    Chrome表单文本框自动填充黄色背景色样式
    请求头缺少 'Access-Control-Allow-Origin'
  • 原文地址:https://www.cnblogs.com/start20180703/p/10354435.html
Copyright © 2020-2023  润新知