事务概念
- 事务指的是逻辑上一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败。
ACID性质:
- 1.原子性(ATOMIC):整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
- 2.一致性(Consistency)在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。举个例子:A和B之间进行转账,A和B的钱加起来一种是2000块钱,那么无论他们之间 进行了多少次的转账操作,最后的钱数加起来应该还是等于2000。
事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。
一致性是指当事务完成时,必须使所有数据都具有一致的状态。在关系型数据库中,所有的规则必须应用到事务的修改上,以便维护所有数据的完整性。 - 3.隔离性(Isolation)两个事务的执行是互不干扰的,一个事务不可能看到其他事务运行时中间某一时刻的数据,链接:
MySQL的隔离性主要由锁加MVCC实现。
锁:比如有事物A和事物B,相对于A来说,你B想要执行,要么在我执行之前执行,要么在我执行完毕之后,你再开始执行。
MVCC:多版本并发控制,事务读到的数据总是以自己事务开始时为准,除非是自己对数据做了操作;否则别人的操作对我不可见。 - 4.持久性(Durability)在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
1.进行数据库提交操作时使用事务(Transaction)是为了?(B)
A.提高效率
B.保证数据一致性
C.网络安全
D.归档数据文件
解读:在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏,因而保证数据的一致性。
2.设有两个事务T1,T2,其并发操作如下所示,下面评价正确的是(D)
步骤 T1 T2
1 读A=100
2 读A=100
3 A=A+10写回
4 A=A-10写回
A.该操作不能重复读
B.该操作不存在问题
C.该操作读"脏"数据
D.该操作丢失修改
解读:
1)丢失修改
当两个或多个事物读入同一数据并修改,会发生丢失更新问题,即后一个事物更新的结果被前一事务所做更新覆盖 即当事务A和B同事进行时,事务A对数据已经改变但并未提交时B又对同一数据进行了修改(注意此时数据是A还未提交改变的数据),到时A做的数据改动丢失了
2)不可重复读
当两个事务读取某个数据后,另一事务执行了对该数据的更新,当前一事务再次读取该数据(希望与第一次读取的是相同的值)时,得到的数据与前一次的不一样,这是由于第一次读取数据后,事务B对其做了修改,导致再次读取数据时与第一次读取的数据不相同
3)读‘脏数据’
当一个事务修改某个数据后,另一事务对该数据进行了读取,由于某种原因前一事务撤销了对改数据的修改,即将修改过的数据恢复原值,那么后一事务读到的数据与数据可得不一致,称之为读脏数据