面经-数据库

事务指的是满足 ACID 特性的一组操作,可以通过 Commit 提交一个事务,也可以使用 Rollback 进行回滚。

ACID
1.原子性(A)

一、并发一致性问题
在并发环境下,事务的隔离性很难保证,因此会出现很多并发一致性问题

  1. 丢失修改
    丢失修改指一个事务的更新操作被另外一个事务的更新操作替换。例如:T1和T2两个事务都对一个事务进行修改,T1先修改并提交生效,T2随后修改,T2的修改覆盖了T1的修改。
    图片说明

  2. 读脏数据
    读脏数据指在不同事务下,当前事务可以读到另外事务未提交的数据。例如:T1修改一个数据但未提交,T2随后读取这个数据。如果T1撤销了这次修改,那么T2读取的是脏数据。
    图片说明

  3. 不可重复读
    不可重复读指在一个事务内多次读取同一个数据集合。在这一事务还未结束前,另一事务也访问了该同一数据集合并做了修改,由于第二个事务的修改,第一次事务的两次读取的数据可能不一致。例如:T2读取一个数据,T1对该数据做了修改。如果T2再次读取这个数据,此时读取的结果和第一次读取的结果不同。
    图片说明

  4. 幻影读
    幻读本质上也属于不可重复读的情况,T1读取某个范围的数据,T2在这个范围内插入新的数据,T1再次读取这个范围的数据,此时读取的结果和第一次读取的结果不同。
    图片说明

产生并发不一致问题的主要原因是破坏了事务的隔离性,解决方法是通过并发控制来保证隔离性。并发控制可以通过封锁来实现,但是封锁操作需要用户自己控制,相当复杂。数据库管理系统提供了事务的隔离级别,让用户以一种更轻松的方式处理并发一致性问题。

二、封锁

三、隔离级别

  • 未提交读(READ UNCOMMITTED)
    事务中的修改,即使没有提交,对其他事务也是可见的

  • 提交读(READ COMMITTED)
    一个事务只能读取已经提交的事务所做的修改

  • 可重复读(REPEATABLE READ)
    保证在同一个事务中多次读取同一数据的结果是一样的

  • 可串行化(SERIALIZABLE)
    强制事务串行执行,这样多个事务互不干扰,不会出现并发一致性问题。
    该隔离级别需要加锁实现,因为要使用加锁机制保证同一时间只有一个事务执行,也就是保证事务串行执行。

图片说明

全部评论

相关推荐

05-05 21:45
已编辑
广州大学 Java
点赞 评论 收藏
分享
心中的变压器:简历需要突出重点
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务