1. 什么是事务?
事务是逻辑上的一组操作,这些操作是作为一个整体来执行的;如果其中任何一个操作失败,则整个事务都将回滚,即还原到操作前的状态。
2.事务具有四个特征ACID
a)原子性(Atomicity)
整个事务中的所有操作,必须作为一个单元全部完成(或全部取消)。
b)一致性(Consistency)
在事务开始之前与结束之后,数据库都保持一致状态。
c)隔离性(Isolation)
一个事务不会影响其他事务的运行。
d)持续性/持久性(Durability)
在事务完成以后,该事务对数据库所作的更改将持久地保存在数据库之中,并不会被回滚。
3. 事务的隔离级别有哪些?
答:事务的隔离级别包括:读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。不同的隔离级别在并发访问情况下会表现出不同的行为。
4. 数据库锁有哪些类型?
答:数据库锁包括行级锁、表级锁和页级锁。在不同的场景下使用不同的锁可以提高数据库的并发性能。
5. 什么是死锁?
答:死锁是指两个或两个以上的事务都在等待一个资源而无法继续执行的情况。这种情况下,每个事务都在等待另一个事务释放资源,导致两个事务都无法完成,进而导致系统无响应。为避免死锁,通常需要应用锁定策略来保障事务间的并发访问。
6.数据库中 脏读、幻读、不可重读是什么意思?
脏读、幻读、不可重复读是关系型数据库中的并发控制问题,以下是它们的解释:
- 脏读(Dirty Read):一个事务读取了另一个事务未提交的数据,如果另一个事务回滚,则原事务读取的数据变为无效数据。比如,事务1开始读取数据,事务2修改该数据并未提交,事务1读取到的数据是无效的,因为事务1所读取的数据实际上还没有被提交到数据库。
- 幻读(Phantom Read):一个事务执行相同的查询条件两次返回不同的结果。比如,事务1执行一个SELECT语句,并按条件排列返回结果集,事务2对表中的数据插入一些新的行,此时,事务1再次执行相同的SELECT语句,结果集不同,因为新插入的行被排在了前面。
- 不可重复读(Non-repeatable Read):一个事务执行相同的查询条件两次返回不同的结果。这与幻读类似,但幻读指的是新增或删除数据引起的不一致,而不可重复读则是修改数据引起的不一致。
这些问题都与并发事务有关。并发事务意味着多个事务同时访问同一个资源,比如数据库中的数据。为了解决并发事务带来的问题,数据库提供了锁机制,通过加锁和释放锁来控制并发访问。