Transaction

前言(Preface)

事务是一个很难理解的概念,它比较抽象,抽象到什么程度,就是发明事务这个原则的那个老头儿,他就因为这个事务的原则这件事儿,获得了图灵奖,后来他去微软做了SQLServer。所以说,你想这个东西得多抽象,多难理解,它才能得图灵奖,不是随随便便的几句话,就得图灵奖。

1.什么是事务

关于事务其实有很多的内容,但是简单概括一下就4句话,即满足如下这四个特征 (原子性一致性隔离性持久性) 的数据库访问就叫事务:

原子性:

原子性指的是这个事务,它是一个完整的过程,要么都成功,要么都失败。是一个不可再分割的整体。比如转账就是一个完整的业务。就这一特点,被老头概括的给它取了个名字,他叫原子性。

一致性:

一致性就是事务访问前后,数据是一致的。用财务术语来说,叫收支平衡。比如转账业务,张三8000,李四5000,两个人加起来总量是一万三,张三转出1000,李四就必须收到1000,无论怎么转,这个钱还得是一万三,总量不变。前后的数据总量是平衡的,不能有变化。叫做收支平衡。

隔离性:

隔离性指的是事务过程中访问的数据,要被隔离,不允许别人访问,那我访问的时候,你是不能访问的,不然的话,因为我正在改这份数据,这个数据还不稳定,而你却能看到,还能去改它,就有冲突了。

持久性:

持久性指的是事务一旦达成,一旦实现了,那么就永久有效。比如张三转账给李四1000块钱,李四收到了,这件事就即时生效了,没有任何人,有任何权利,平白无故的让人家回滚,张三今天转账生效了,明天想一想,有点后悔了,不想给了,想跟银行说,你把它回滚回来,这是不可以的,只要commit,就是永久有效。当然,那李四说我答应,我再给你转过去,那就是另外一个事务了,另一件事,之前那件事就生效了,没有任能推翻它。

2.JDBC对事务的支持

事务虽然是一个比较抽象的概念,但在工作开发时,去实现管理事务实际是非常简单的,比如在JDBC当中,想手动管理事务,就3句话:

  1. conn.setAutoCommit(false);
  2. conn.commit();
  3. conn.rollback();
    以上这3句话,就能够实现事务的4个特征,不是说一句话实现一点,而是3句话合在一起共同实现事务。当然,在Spring,MyBatis,Hibernate等框架,能够给我们提供更简单的,管理事务的方式,那时,可能一句话就能全部搞定,只写一个SQL和一个方法声明,其他的大都自动实现了,但底层的实现还是要有所了解,否则你没有底蕴,无论是面试,还是未来的职业发展都会有影响,而且有些公司是不用开源框架的,他会自己写一个框架,学会底层的东西还是非常重要的。

参考文献(References)

文中如有侵权行为,请联系me。。。。。。。。。。。。。
文中的错误,理解不到位的地方在所难免,也请指教!在成长过程中,也将继续不断完善,不作为专业文章。不喜勿喷。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值