事务相关知识点

1. 事务的四大特性(ACID):

原子性(Atomicity):事务中所有操作是不可再分割的原子单位。事务中所有操作要么全部执行成功,要么全部执行失败。

一致性(Consistency):事务执行后,数据库状态与其它业务规则保持一致。如转账业务,无论事务执行成功与否,参与转账的两个账号余额之和应该是不变的。

隔离性(Isolation):隔离性是指在并发操作中,不同事务之间应该隔离开来,使每个并发中的事务不会相互干扰。

持久性(Durability):一旦事务提交成功,事务中所有的数据操作都必须被持久化到数据库中,即使提交事务后,数据库马上崩溃,在数据库重启时,也必须能保证通过某种机制恢复数据。

2. 传播行为定义了被调用方法的事务边界

传播行为意义
PROPERGATION_MANDATORY表示方法必须运行在一个事务中,如果当前事务不存在,就抛出异常
PROPAGATION_NESTED表示如果当前事务存在,则方法应该运行在一个嵌套事务中。否则,它看起来和 PROPAGATION_REQUIRED 看起来没什么俩样
PROPAGATION_NEVER表示方法不能运行在一个事务中,否则抛出异常
PROPAGATION_NOT_SUPPORTED表示方法不能运行在一个事务中,如果当前存在一个事务,则该方法将被挂起
PROPAGATION_REQUIRED表示当前方法必须运行在一个事务中,如果当前存在一个事务,那么该方法运行在这个事务中,否则,将创建一个新的事务
PROPAGATION_REQUIRES_NEW表示当前方法必须运行在自己的事务中,如果当前存在一个事务,那么这个事务将在该方法运行期间被挂起
PROPAGATION_SUPPORTS表示当前方法不需要运行在一个是事务中,但如果有一个事务已经存在,该方法也可以运行在这个事务中

3. 隔离级别

在操作数据时可能带来 3 个副作用,分别是脏读、不可重复读、幻读。为了避免这 3 中副作用的发生,在标准的 SQL 语句中定义了 4 种隔离级别,分别是未提交读、已提交读、可重复读、可序列化(串行化)。

三种事务并发问题

脏读:读取到另一个事务未提交数据;
不可重复读:两次读取不一致;另一事务对记录做了修改
幻读(虚读):读到另一事务已提交数据。对同一张表的两次查询不一致,因为另一事务插入了一条数据。例如查询班级总数第一次查询到50人,第二次查询到51人,后来的人可能迟到了。

四大隔离级别
隔离级别意义
SERIALIZABLE(串行化)不会出现任何并发问题,因为他是对同一数据的访问是串行的,非并发访问的;性能最差
REPEATABLE_READ(可重复读)(MySQL)防止脏读和不可重读读,不能处理幻读问题;性能比SERIALIZABLE好
READ_COMMITTED(读已提交数据)(Oracle)防止脏读,没有处理不可重复读和幻读;性能比REPEATABLE_READ好
READ_UNCOMMITTED (读未提交事务)可能出现任何事务并发问题;性能最好

而在 spring 事务中提供了 5 种隔离级别来对应在 SQL 中定义的 4 种隔离级别,如下:

隔离级别意义
ISOLATION_DEFAULT使用后端数据库默认的隔离级别
ISOLATION_SERIALIZABLE这种隔离级别是所有的事务都在一个执行队列中,依次顺序执行,而不是并行(对应可序列化)。可以避免脏读、不可重复读、幻读。但是这种隔离级别效率很低,因此,除非必须,否则不建议使用。
ISOLATION_REPEATABLE_READ一个事务不可能更新由另一个事务修改但尚未提交(回滚)的数据(对应可重复读)。可以避免脏读和不可重复读,但无法避免幻读
ISOLATION_READ_COMMITTED允许在一个事务中读取另一个已经提交的事务中的数据(对应已提交读)。可以避免脏读,但是无法避免不可重复读和幻读
ISOLATION_READ_UNCOMMITTED允许读取未提交的数据(对应未提交读),可能导致脏读、不可重复读、幻读
事务开始边界与结束边界

开始边界(con.setAutoCommit(false)),结束边界(con.commit()或con.rollback());

4. 只读

如果在一个事务中所有关于数据库的操作都是只读的,也就是说,这些操作只读取数据库中的数据,而并不更新数据,那么应将事务设为只读模式( READ_ONLY_MARKER ) , 这样更有利于数据库进行优化 。

因为只读的优化措施是事务启动后由数据库实施的,因此,只有将那些具有可能启动新事务的传播行为 (PROPAGATION_NESTED 、 PROPAGATION_REQUIRED 、 PROPAGATION_REQUIRED_NEW) 的方法的事务标记成只读才有意义。

5. 事务超时

如果一个事务长时间运行,这时为了尽量避免浪费系统资源,应为这个事务设置一个有效时间,使其等待数秒后自动回滚。与设置“只读”属性一样,事务有效属性也需要给那些具有可能启动新事物的传播行为的方法的事务标记成只读才有意义。

事务是指一组逻辑上的操作,这些操作要么全部执行成功,要么全部失败回滚,从而保证数据库的一致性和完整性。事务分析数据库原理是数据库管理系统(DBMS)的关键组成部分,其重要性不言而喻。以下是事务分析数据库原理的一些核心知识点: 1. 事务的ACID特性:事务必须满足ACID特性,即原子性、一致性、隔离性和持久性。 2. 事务的隔离级别:事务的隔离级别是指多个并发执行的事务之间可以看到彼此的数据变化的程度。常见的隔离级别包括:读未提交、读已提交、可重复读和串行化。 3. 锁定机制:为了保证多个事务之间的数据隔离性,数据库采用锁定机制来避免并发访问造成的数据冲突。常见的锁定机制包括悲观锁和乐观锁。 4. 日志机制:为了保证事务的持久性,数据库采用日志机制来记录所有对数据库的修改操作,以便在需要的时候进行回滚或恢复操作。 5. 事务的实现方式:事务可以通过编程语言的事务处理机制实现,也可以通过存储过程、触发器等数据库内置机制实现。 6. 分布式事务:在分布式环境中,多个数据库之间的事务需要协调和同步,这就需要采用分布式事务管理机制来保证数据的一致性和完整性。 以上是事务分析数据库原理的一些核心知识点,掌握了这些知识点,可以更好地理解和应用数据库管理系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值