事务的概念性质以及并发的四个问题 database day0302

事务

构成单一逻辑工作单元的操作集合,我们称为事务(transaction)

事务是一组原子性的SQL查询,或者说是一个独立的工作单元。

即使有故障,数据库系统也要保证事务的正常执行——要么执行整个事务,要么属于该事务的操作一个也不执行。

START TRANSACTION/BEGIN:开启一个事务,标记事务的起点。标志事务的开始,在Mysql中可以用set autocommit=0替代。

COMMIT:提交事务,表示事务成功被执行。结束事务。 重要的是,如果打开两个事务,一个事务A修改后commit,另一个事务B只有commit后才会看到事务A的修改结果。

ROLLBACK:回滚事务,回滚到初始状态或者回滚点。不代表发生故障,它也是一个数据库操作,属于事务的一部分。表示回滚事务,回滚到事务开启前的状态,或者中间的某个回滚点。要想ROLLBACK生效,就必须要COMMIT。

SAVEPOINT:回滚点
具体示例:

savepoint sp1;
updata member1 set id=100 where name = ‘xiaoming’;
rollback to sp1;

RELEASE SAVEPOINT: 删除回滚点

SET TRANSACTION:设置隔离级别

注意事项:

发生故障时,结束事务,即使没有设置回滚点,都会回到事务开启前的状态。

事务的性质 ACID
原子性(Atomicity)

原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。无论是操作系统崩溃,还是计算机停止运行,这项要求都要成立。

一致性(Consistency)???????为什么要保持一致?我还是无法理解,什么是一致性???一致性就是对总量不变?如果修改了AB,但是我不读取AB,是否违反一致性,还是说数据库回自己检查?那直接修改数值,就不是一致性吗?是否意味着不能进行修改?

事务作为一个原子性操作,它从一个一致性的数据库状态开始运行,事物结束时,数据库的状态必须再次是一致的。

隔离性(Isolation)

尽管多个事务可能并发执行,但系统保证,对于任何一对事务T1和T2,在T1看来,T2要么在T1开始之前已经完成,要么在T1完成之后才开始执行。因此,每个事务都感觉不到系统中有其他事务在并发地执行。
并不是同时发生,轮流发生,或者在一个时间段内发生。但是隔离性与并发会有冲突不可能百分百实现。

持久性(Durability)

一个事务成功完成后,它对数据库的改变必须是永久的,即使出现系统故障。

并发执行时可能会引发的问题(破坏了隔离性)
幻读

并发执行事务会引发的问题,简单来说就是一个事务A需要进行前后两次统计,或者说就是前后读两次,然后另一个事务B在此期间对事务A涉及到的表插入了新的符合统计条件的记录,并且提交了。这样就导致事务A前后两次统计到的数据不一致,这种现象我们称之为幻读。
从这个事务的视觉来看,平白无故多加了几条数据,就像看到幻觉那样,看到不应该看到的东西,就等于产生幻觉了,所以叫做幻读。同一事务中生成的两张报表是不一致的。
在这里插入图片描述

脏写

脏写是指多个事务并发写同一数据,先执行的事务所写的数据会被后写的数据覆盖。
脏写会导致更新消失,就好像先提交的事务根本没有执行一样。
例如事务A对x+100,但是还没写回去,此时事务B插入,对x-100,并且写回,等事务B结束时,事务A才写回,这样就破坏了事务原则里面的一致性。先写后读?
在这里插入图片描述

脏读

同样是违反一致性,并发得读取同一数据,在不同时机读取同一数据,得到不同的结果。

如果一个事务A向数据库写数据,但该事物还没提交或者终止,另一个事务B就看到事务A写入数据库的数据,这个现象我们称之为脏读。 先写后读?
在这里插入图片描述

不可重复读(与幻读区别是幻读是插入新的行,不可重复读是修改?)

同一事务中生成的两张报表是不一致的,因为中间会有事务对报表进行修改,违反一致性。

一个事务有对同一个数据项的多次读取,但是在某前后两次读取之间,另一个事务更新该数据项,并且提交了。在后一次读取时,感知到了提高的更新。这个现象就是不可重复读(到相同数据)?
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值