事务

作者: 陈智涛 | 来源:发表于2017-08-16 10:42 被阅读0次

    一、定义

    事务:一系列要发生的连续操作
    事务安全:一种保护连续操作同时满足实现的一种机制
    事务安全的意义:保证数据操作的完整性

    事务的原理

    事务在开启后,所有的操作都会临时保存到事务日志中,事务日志只有在commit 命令执行后,才会将数据同步到数据表,其他任何情况都会被清空(rollback,断电,断开连接)

    屏幕快照 2017-08-15 下午4.00.14.png

    二、事务操作

    示例:
    先创建一张账户表

    create table my_account(
        number char(16) not null unique comment "账户",
        name varchar(20) not null,
        money decimal (10,2) default 0.0 comment '账户余额'
    ) charset utf8;
    
    --插入数据
    insert into my_account (`number`,`name` ,`money` )values('0000000000000001','张三',1000),
    ('0000000000000002','李四',2000)
    

    事务操作分为两种:自动事务和手动事务

    2.1手动事务

    操作流程
    1.开启事务:告诉系统以下的操作(写),不要直接写到数据表中,先存放到事务日志
    指令:

    start transaction;
    

    2.事务操作
    李四向张三转账1000,李四账户减少1000,张三账户增加1000
    (a)李四账户减少1000

    update my_account set money = money - 1000 where id = 2;
    

    查看数据表
    select * from my_account


    但用其他账户登录,李四账户没有改变
    (b)张三账户增加1000块

    update my_account set money = money + 1000 where id = 1;
    
    屏幕快照 2017-08-15 下午3.25.21.png

    (3)关闭事务
    选择性的将日志文件的操作结果同步到数据表,或者直接清空操作日志(原来的操作全部清空)
    (a)提交事务:同步数据(操作成功)commit
    (b)回滚事务:直接清空日志表(操作失败)rollback

    (4)提交事务

    commit
    

    回滚点

    在某个操作成功完成之后,后续的操作有可能成功,有可能失败,但不管成功,还是失败,前面的操作都已经成功,可以在当前成功的位置,设置一个点,可以供后续失败操作返回到该位置,而不是返回所有操作,这个点就叫做回滚点.

    • 设置回滚点语法:
    savepoint 回滚点名字
    
    • 回到回滚点语法:
    rool back to 回滚点名字
    

    2.2 自动事务

    mysql 中默认都是自动事务,用户完成操作会立即同步到数据表中
    自动事务处理通过 atuocommit 变量控制

    show variables like 'atuocommit'
    

    关闭自动提交

    set atuocommit= off/0;
    

    相关文章

      网友评论

          本文标题:事务

          本文链接:https://www.haomeiwen.com/subject/xdamrxtx.html