关于Java事物的描述

事物详解

事物是逻辑上的一组操作,要么内部操作都执行,要么都不执行。

举个例子,小明要给小红转500元,这个转账涉及到两个关键操作:第一,小明账户上的余额减少500元;第二,小红户上余额增加500元。如果这两个操作没有一并执行,或者说是只执行了一个,那肯定就是不行的了。而事物,就是要保证这两个操作要么成功要么失败。

事物的特性(ACID)

在这里插入图片描述
1.原子性:事物是最小的执行单元,不允许分割。就像原子一样,要么全部完成,要么全部不起作用。
2.一致性:执行事物前后,数据保持一致,多个事物对同一数据读取的结果是完全相同的。
3.隔离性:并发访问数据库时,一个事物不会被其他事物所干扰,各并发事物之间的数据库是独立的。
4.持久性:一个事物被提交后,它对数据库中数据的改变是持久性的,即使数据库发生故障也不应该对其有所影响。

并发事物带来的问题
  • 脏读(Dirty read):当一个事物正在访问数据并且对数据进行修改,而这种修改还未提交到数据库中时,另一事物使用该数据。因为修改并未提交,所以取得的数据是还未改变的数据,这样所取到的数据被称为脏数据
  • 丢失修改(Lost to modify):指的是两个并发事物同时在对同一数据进行修改,在第一个事物修改数据后,第二个事物也修改数据。从而导致第一个事物的修改结果丢失;比如事物1读取到X=20,事物2也读取到X=20,而事物1先进行X=X+1操作,事物2进行X=X-1操作,最后的结果为X=19,这样事物1的修改就丢失掉了。
  • 不可重复读(Unrepeatable-read):指在同一事物内多次读取同一数据,在这个事物还没结束时,另一个事物也访问了该数据。那么,在第一个事物中的两次读数据之间,由于第二个事物对数据进行了修改导致第一个事物两次读取的数据可能会不一样,这就称为不可重复读
  • 幻读(Phantom read):幻读和不可重复读很类似,它发生在一个事物读取了几行数据,接着另一个并发事物插入了一些数据时。在随后的查询中,第一个事物就会发现多了一些原本不存在的记录,就好像出现了幻觉一样,故被称为幻读
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值