• mysql_事务


    事务是针对数据的,不是针对结构的

    存储引擎innodb支持事务,myisam不支持事务
    需求:有一张银行账户表,有A用户给B账户转账,A账户减少,B账户增加,但是A操作之后断电。
    解决方案:A减少钱,但是不立即减少钱,B收到钱后,同时修改数据库表

    事务安全:
    事务transaction:一系列要发生的连续的操作
    事务安全:一种保护连续操作同时满足(实现)的一种机制

    事务安全意义:保证数据操作完整性
    -- 创建一个账户表
    create table my_account(
    number varchar(16) not null unique comment '账户',
    name varchar(20) not null,
    money decimal(10,2) default 0.0 comment '账户余额
    ) charset utf8;
    insert into my_account values
    ('0000000000000001','张三',1000),
    ('0000000000000002','李四',2000);
    alter table my_account add id int primary key auto_increment first;
    UPDATE my_account set money = money-1000 where id=1;

    事务操作:
    事务操作分为两种:自动事务(默认的),手动事务
    手动事务:操作流程
    1、开启事务:告诉系统一下所有写操作,不要直接写入数据表,先存放到事务日志
    start transaction;

    2、事务操作:
    a)李四账户减少
    update my_account set money = money-1000 where id=2;
    b)张三账户增加
    update my_account set money = money+1000 where id=1;
    3、关闭事务:选择性的将日志文件中操作的结果保存到数据表(同步)或者说直接清空事务日志(原来操作全部清空)
    a)提交事务:同步数据表(操作成功)
    commit;
    b)回滚事务:直接清空日志表(操作失败)
    rollback;
    事务原理:
    事务开启之后,所有操作都会保存到事务日志,只有得到commit命令才会同步到数据库,其他任何情况都会清空


    事务回滚点:
    回滚点:在某一个成功操作完成后,后边操作可能成功或失败,但是不管成功还是失败,前面操作都已成功,可以再当前成功为止,设置一个点:可以供后续失败操作返回到该位置 ,而不是返回所有操作,这个点称为回滚点

    设置回滚点语法:savepoint 回滚点名字

    回到回滚点语法:rollback to 回滚点名字

    --回滚点操作
    start transaction;
    -- 发工资
    update my_account set money = money + 10000 where id = 1;
    -- 设置回滚点
    savepoint sp1;
    -- 扣税,扣错了
    update my_account set money = money - 10000*0.05 where id = 2;
    --回滚到回滚点
    rollback to sp1;
    -- 继续操作
    update my_account set money = money - 10000*0.05 where id = 1;
    -- 查看结果
    select * from my_account;
    -- 提交
    commit;

    自动事务:
    在mysql中,默认的都是自动事物,用户操作完会立即同步到数据库表中
    自动事物:系统通过autocommit变量控制
    show variables like 'autocommit';
    关闭自动事物:
    set autocommit = 0;
    再次直接写操作,需要手动处理,commit提价,rollback回滚

    通常都会使用自动事物

    事物特性:
    事物四大特性:ACID
    A:atomic原子性,事物的整个操作是一个整体,不可分割,要么全部成功,要么全部失败;
    C:consistency:一致性,事物操作的前后,数据表中的数据没有变化
    I:isolation,隔离性,事物操作是相互隔离,不受影响的
    D:durability:持久性,数据一旦提交,不可改变,永久的改变数据表数据

    锁机制:innodb,默认是行锁,但是如果在事物操作的过程中,没有使用到索引,那么系统会自动全表检索数据,自动升级为表锁
    行锁:只有当前行被锁住,别的用户都不能操作
    表锁:整张表被锁住,别的用户都不能操作

  • 相关阅读:
    PHP编码规范-笔记
    MySQL
    烧毁的诺顿
    页面查询案例(使用redis数据库)
    非关系型数据库-redis
    校验用户名是否存在
    使用Cookie实现浏览器显示上次登录时间
    Java文件下载
    随机验证码生成
    Response对象
  • 原文地址:https://www.cnblogs.com/qull/p/6592083.html
Copyright © 2020-2023  润新知