需要了解的spring事务特性
⼀、spring事务的四⼤特征:
原⼦性:⼀个事务中所有的操作都是⼀个整体,要么都成功,要么都失败。
⼀致性:事务的执⾏的前后数据的完整性保持⼀致。
隔离性:⼀个事务在执⾏的过程中,不应该受到其他事务的⼲扰。
持久性:事务提交后对数据库的修改是永久的。
原⼦性与⼀致性的区别:
原⼦性是保证最终结果的正确。
⼀致性是针对事务操作过程中数据的可见性,只有最初的数据和最终的数据对外可见,避免在“未提交读”的情况下造成脏读。
⼆、事务的五⼤隔离级别:
default:默认的事务隔离级别,使⽤数据库默认的数据隔离级别。MySQL默认的事务隔离级别是“可重复读(repeatable_read)”。
read_uncommitted:读未提交,⼀个事务可以操作另⼀个未提交的事务,可能会出现脏读、不可重复读、幻读。
read_committed:读已提交,⼀个事务只能操作另⼀个已经提交的事务,可能会出现不可重复读、幻读。
repeatable_read:可重复读,能够避免脏读,不可重复读,不能避免幻读。
serializable:串⾏化,隔离级别最⾼,消耗资源最低,代价最⾼,能够防⽌脏读,不可重复读,幻读。
脏读:事务A读取到了事务B未提交的数据,此时如果事务B因为发⽣错误并执⾏回滚,那么事务A读到的数据就是脏数据。
不可重复读:事务A在执⾏过程中多次读取同⼀条数据,但是由于这条数据中途被事务B修改并提交,导致事务A多次读取的数据不⼀致,这种现象被称为“不可重复读”。如果多次读取数据⼀致,则是“可重复读”。
幻读:事务A在执⾏过程中多次获取数据列表,执⾏过程中事务B新增或删除了数据,导致查询结果不⼀致,这种情况被称为“幻读”。
不可重复读和幻读的区别:“不可重复读”是针对的update操作,可⽤⾏级锁解决。“幻读”是针对insert和delete操作,可⽤表级锁解决。
三、事务的七⼤传播特性:spring怎么读音是什么
Propagation.REQUIRED:如果调⽤⽅已经存在事务,则加⼊到同⼀个事务中运⾏,否则重新开启⼀个新事务。
Propagation.SUPPORTS:如果调⽤⽅已经存在事务,则加⼊到同⼀个事务中运⾏,否则以没有事务的⽅式运⾏。
Propagation.MANDATORY:如果调⽤⽅已经存在事务,则加⼊到同⼀个事务中运⾏,否则抛出异常。
Propagation.REQUIRES_NEW:不管之前有没有事务存在,都开启⼀个新的事务。
Propagation.NOT_SUPPORTED:如果调⽤⽅已经存在事务,则将事务挂起,以没有事务的⽅式运⾏,结束后事务恢复正常。
Propagation.NEVER:如果调⽤⽅已经存在事务,则抛出异常。
Propagation.NESTED:如果调⽤⽅已经存在事务,则执⾏嵌套事务。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论