Mysql 事务

作者: dawsonenjoy | 来源:发表于2018-09-16 17:52 被阅读1次

    一个sql语句就是一个事务,事务可以保证一组sql语句要么都成功,要么都失败,默认自动提交,可以设置set autocommit=0关闭自动提交。

    1.场景举例

    比如有两个数据库1和2,分别代表2个人的存款,当其中一个人转钱给另一个人时,步骤一般是数据库1中扣除金额A,数据库2中增加金额A。假如在扣除数据库1中金额后立刻断电了,那么数据库2中还没来得及加金额,这就造成数据出问题,所以这里就需要将这一组操作都添加到事务当中。即要么扣款和增款都完成,要么都失败,从而保证了数据不会出错。

    2.DTL

    事务控制语言

    (1)基本格式
    start transaction;
    #事务开始
    ...
    中间是执行语句
    ...
    #rollback;
    #在事务没结束前如果出错可以通过这句回滚
    commit;
    #如果事务正常结束,则最后通过这句提交,否则数据不会真正的更新
    
    (2)事务失败例子
    mysql> start transaction;
    mysql> update food set number=number-10 where id=1;
    mysql> update food set number=number-15 where id=2;
    mysql> update food set number=number-10 where id=100;
    #sql语句出错
    mysql> rollback;
    #回滚,会发现所有数据都回到第一句之前的样子
    

    (3)事务成功例子

    mysql> start transaction;
    mysql> update food set number=number-10 where id=1;
    mysql> update food set number=number-15 where id=2;
    mysql> commit;
    #成功提交,数据修改完成,此时会发现数据已经真的更新了
    
    (4)满足特性

    (1)原子性
    一个事务中的语句要么全做,要么全不做
    (2)一致性:数据库的数据更改应该合理,即对应上面的转账例子
    (3)隔离性:如果多个事务并发执行,但每个就像独立执行一样
    (4)持久性:数据执行成功应该是明确的硬盘数据更改,而不仅是内存中的变化(通过commit提交实现)

    相关文章

      网友评论

        本文标题:Mysql 事务

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