zoukankan      html  css  js  c++  java
  • MySQL系列(二)---MySQL事务

    MySql 事务

    目录

    目录

    什么是事务(transaction)

    • 保证成批操作要么完全执行,要么完全不执行,维护数据的完整性。也就是要么成功要么失败。
    • 事务可以是n条sql语句(n>=0)
    • 不是所有数据库引擎支持事务,InnoDB引擎支持事务处理

    事务四大特性

    • 原子性(Atomic):事务的所有所有操作要么全部执行,要么全部不执行。如果中途出现错误不会停止,而是回滚到事务前的状态
    • 一致性(Consistency):如果事务执行前是一致的,那么执行后也是一致的,不能破坏关系数据的完整性以及业务逻辑上的一致性,事务按照预期实现。
    • 隔离性(Isolation):隔离性可以防止多个事务并发时导致数据的不一致
    • 持久性(Durability):事务执行成功后对数据库的修改是永久的

    事务并发不进行事务隔离

    • 脏读:事务A读到未提交事务B修改的数据,如果此时事务B中途执行失败回滚,那么此时事务A读取到的就是脏数据。比如事务A对money进行修改,此时事务B读取到事务A的更新结果,但是如果后面事务A回滚,那么事务B读取到的就是脏数据了。
    • 不可重复读:同一个事务中,对同一份数据读取的结果不一致。事务A在事务B对数据更新前进行读取,然后事务B更新提交,事务A再次读取,这时候两次读取的数据不同。
    • 幻读:同一个事务中,同一个查询多次返回的结果不一样。事务B查询表的记录数,然后事务A对表插入一条记录,接着事务B再次查询发现记录数不同。

    区别

    • 脏读和不可重复读:脏读是事务读取了还未提交事务的更新数据。不可重复读是同一个事务中,几次读取的数据不同。
    • 不可重复读和幻读的区别:都是在同一个事务中,前者是几次读取数据不同,后者是几次读取数据整体不同。

    隔离级别

    隔离级别 作用
    Serializable(串行化) 避免脏读、不可重复读、幻读
    Repeatable(可重复读) 避免脏读、不可重复读
    Read committed(读已提交) 避免脏读
    Read uncommitted(读未提交) none
    • mysql支持上面4种隔离级别,默认为可重复读

    事务的使用

    start transcation;
    delete from user;
    savepoint dele;
    ****
    rollback dele;
    commit;
    
    • transcation 事务开始
    • rollback 回滚到事务起点
    • savepoint 保留回滚位置
    • rollback point_name 回滚到设置的位置

    使用注意点

    • 如果事务中sql正确运行,后面没有commit,结果是不会更新到数据库的,所以需要手动添加commit。
    • 如果事务中部分sql语句出现错误,那么错误语句后面不会执行。而我们可能会认为正确操作会回滚撤销,但是实际上并没有撤销正确的操作,此时如果再无错情况下进行一次commit,之前的正确操作会生效,数据库会进行更新。

    我觉得分享是一种精神,分享是我的乐趣所在,不是说我觉得我讲得一定是对的,我讲得可能很多是不对的,但是我希望我讲的东西是我人生的体验和思考,是给很多人反思,也许给你一秒钟、半秒钟,哪怕说一句话有点道理,引发自己内心的感触,这就是我最大的价值。(这是我喜欢的一句话,也是我写博客的初衷)

    作者:jiajun 出处: http://www.cnblogs.com/-new/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如果觉得还有帮助的话,可以点一下右下角的【推荐】,希望能够持续的为大家带来好的技术文章!想跟我一起进步么?那就【关注】我吧。

  • 相关阅读:
    framwork NHibernate
    java eclise的配置
    java jdk环境变量配置
    第零章 关于课程教材与讲义
    ActiveMQ(5.10.0)
    ActiveMQ(5.10.0)
    ActiveMQ(5.10.0)
    ActiveMQ(5.10.0)
    ActiveMQ(5.10.0)
    ActiveMQ(5.10.0)
  • 原文地址:https://www.cnblogs.com/-new/p/7239456.html
Copyright © 2011-2022 走看看