欢迎光临散文网 会员登陆 & 注册

spring事务

2021-03-11 22:57 作者:世界永不足够  | 我要投稿

事务属性的种类:

1传播行为,2隔离级别,3只读和事务超时。

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

1传播行为和它的意义:

p..._required(必须的):必须要有一个事务,没有则新建一个事务

p..._required_new:必须新建事务,如果当前存在事务,把当前事务挂起

propergation_mandatory(强制的),方法必须运行在一个事务中,没有事务就抛异常

propergation_nested(嵌套),方法应当运行在一个嵌套事务中

propergation_never(绝不),绝不能有事务,否则抛异常

p。。_supported(支持),当支持(使用)当前事务,如果不存在事务就不使用事务,没有事务就以非事务方式执行

p.._not_suppprted,不支持事务,存在事务则方法被挂起



2隔离级别

操作数据时可能带来三个副作用,分别是脏读,不可重复读,幻读

脏读:举个例子,如果你正在读数据库内容,而我现在修改了数据库内容还没有提交,接着我修改后的内容没有提交的情况下被你读到了,就叫脏读.

不可重复读:举个例子,比如你正在读数据库内容,而我update数据库后提交了,你又读了一次数据库内容,这时出现两个内容不同的结果,这叫不可重复读.

幻读:举个例子,比如你正在读数据库内容,而我insert数据库后提交了,你又读了一次数据库内容,这时你看到内容出现了多一条数据,这叫幻读.

为了避免这三种副作用,sql语句定义了4种隔离级别,分别是未提交读,已提交读,可重复读,可序列化。

spring事务中提供了五种隔离级别来对应sql中的4种隔离级别

        隔离级别——意义:

isolation_default:使用后端数据库默认的隔离级别

i_uncommitted:允许读取未提交的数据(对应未提交读),可能导致脏,幻,不可重复

i_committed:允许读取已经提交的数据(对应已提交读),防脏读,但无法避免:不可重复读和幻读

i_repeatable_read:一个事务无法更新由另一个事务修改但未提交(回滚)的数据(对应可重复读),但无法避免幻读。

i_serializable:所有事务都在一个执行队列中,依次执行,无法并行(对应可序列化)。可避免脏幻不可重复读。但效率很低。


spring事务的评论 (共 条)

分享到微博请遵守国家法律