Java事务的理解

    xiaoxiao2021-04-17  199

    何为事务

    说到事务,我个人理解为“将多条SQL语句操作看做为一个整体”

    举例说明2分钟理解:

    我向你转账,这其中包含了两个步骤。(1)从我账户上扣钱,(2)你的账户钱增加。两个步骤,其中任意一步有可能出问题

    [例如:扣钱成功,增加钱的操作没有成功,程序抛异常了,数据库服务器炸了。。。]看到这里时,你应该理解了为何把SQL操作看做一个整体,如果其中任意一步出错,整个转账的过程应该是不成功的。

    使用事务过程

    1.事务开始

    (1)Oracle的事务开始于一个DML语句。

    (2)Sql server中的事务开始 begin tran[saction]。

    (3)MySQl中begin 或start transaction显式地开启一个事务。

    2.SQL操作语句

    3.事务结束

    事务有两种结束方式:

                (1)提交保存[COMMIT]

                          以转账举例,当扣钱增加钱两个步骤都成功,我们可以使用提交保存,此方法就是对数据的永久修改

                (2)事务回滚[ROLLBACK]

                          以转账举例,当扣钱增加钱,其中一个步骤失败,使用事务回滚,可以回滚到事务开始状态

    事务的特性

    一致性:

    下面三个特性主要是为了保证事务的一致性,这里的一致性讲的数据的前后的一致性。例如转账前后,A和B账户的余额总数不变,保持前后一致

    原子性

    转账是两个步骤[扣钱和增加钱],事务则将它们看为一个过程,“过程”是不可分割的!事务具有原子性讲的就是它们不可以再分割。

    隔离性

    事务的隔离性是为了解决事务并发访问所造成的问题。

    永久性

    当提交保存之后,对数据的修改是永久性的,不可再回滚。

     

    事务并发访问数据带来的问题

    脏读:读取到未提交保存到的数据。

    举例:

    A到J店里去购买一批产品

    J说:“行,先付钱”

    这时A “ start transaction ”开始一个事务

    A继续“ 向J账户付款100000 ”

    A说“我付了 你查查”

    这时“J查询账户”账户中多了100000,J发货了

    A“ 事务回滚[rollback] ”

    以上的例子中,A使J读取到了未提交的100000脏数据,所以这种情况称之为“脏读”

     


    最新回复(0)