【Java面试】数据库原理总结

您所在的位置:网站首页 redis面试题总结 【Java面试】数据库原理总结

【Java面试】数据库原理总结

2023-05-17 22:00| 来源: 网络整理| 查看: 265

文章目录 1. 什么是事务?ACID是什么?2. 数据库中并发一致性问题?3. 事务的隔离等级?4. ACID靠什么保证的呢?

1. 什么是事务?ACID是什么?

事务(Transaction)是指一组相关的操作,这些操作被视为一个单独的、不可分割的工作单元。事务在数据库管理系统中起到重要的作用,可以确保数据的完整性和一致性。通过使用事务,可以将多个数据库操作视为一个逻辑单元,从而保证数据库的可靠性和稳定性。例如,在银行转账过程中,转出金额和转入金额必须同时被更新,以确保账户余额的一致性。如果其中一个操作失败,整个事务将被回滚,以防止不正确的数据状态。

ACID分别表示原子性、一致性、隔离性和持久性:

Atomicity(原子性):事务是一个原子操作,要么全部执行成功,要么全部不执行,不会部分执行。如果其中任何一个操作失败,整个事务将被回滚到初始状态。Consistency(一致性):事务的执行使数据库从一个一致状态转移到另一个一致状态。事务在开始和结束时必须满足数据库的完整性约束,确保数据的有效性。Isolation(隔离性):事务的执行应该与其他并发事务隔离开来,使得每个事务感觉就像在独立地运行。并发事务之间的相互影响应该被隔离,以防止数据的不一致性。Durability(持久性):一旦事务被提交,其结果应该是永久性的,即使在系统故障的情况下也不应该丢失。 2. 数据库中并发一致性问题?

以下是常见的并发一致性问题:

脏读(Dirty Read):一个事务读取了另一个事务尚未提交的数据,如果未提交的事务回滚,则读取到的数据是无效的。T1 和 T2 是两个事务,T1 修改一个数据,T2 随后读取这个数据。如果 T1 撤销了这次修改,那么 T2 读取的数据是脏数据。

不可重复读(Non-repeatable Read):在同一个事务中,多次读取同一数据,但在读取过程中其他事务修改了该数据,导致多次读取的结果不一致。T2 读取一个数据,T1 对该数据做了修改。如果 T2 再次读取这个数据,此时读取的结果和第一次读取的结果不同。

幻读(Phantom Read):在同一个事务中,多次执行相同的查询,但在查询过程中其他事务插入或删除了符合查询条件的数据,导致多次查询的结果不一致。T1 读取某个范围的数据,T2 在这个范围内插入新的数据,T1 再次读取这个范围的数据,此时读取的结果和和第一次读取的结果不同。

3. 事务的隔离等级? 读未提交(Read Uncommitted):最低级别的隔离级别,事务可以读取其他事务尚未提交的数据。这种隔离级别存在脏读、不可重复读和幻读的问题。读提交(Read Committed):事务只能读取其他已提交的数据,保证了一个事务读取到的数据是一致的。但在同一个事务中,多次读取同一数据可能会得到不同的结果,存在不可重复读和幻读的问题。可重复读(Repeatable Read):事务开始时创建一个一致性快照,事务期间读取的数据都是基于这个快照的。其他事务对数据的修改不可见,解决了不可重复读的问题。但仍可能存在幻读的问题。串行化(Serializable):最高级别的隔离级别,通过对事务进行串行执行,完全隔离了并发事务之间的影响。可以避免脏读、不可重复读和幻读的问题,但会降低并发性能。 4. ACID靠什么保证的呢?

数据库通过使用日志和事务日志来记录事务的操作,以便在发生故障时进行回滚和恢复,以此来保证原子性。

数据库通过应用事务规则和约束来确保数据的一致性。

数据库通过实现不同的事务隔离级别(如读未提交、读提交、可重复读和串行化)来提供隔离性。

数据库通过使用日志和写入操作的持久化存储来实现持久性。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3