数据库事务传播属性:
事务传播属性可以在@Transaction注解的propagation属性中定义
传播属性 |
描述 |
REQUIRED |
如果有事务再运行,当前的方法就再这个事务内运行,否则,就启动一个新的事务,并在自己的事务内运行 |
REQUIRES_NEW |
当前的方法必须启动新事务,并在它自己的事务内运行。如果有事务正在运行就将它挂起 |
SUPPORTS |
如果有事务在运行,当前的方法就在这个事务内运行,否则它可以不运行在事务中 |
NOT_SUPPORTE |
当前的方法不应该运行在事务中,如果有运行的事务,将它挂起。 |
MANDATORY |
当前的方法必须运行在事务内部,如果没有正在运行的事务,就抛出异常 |
NEVER |
当前的方法不应该运行在事务中,如果有运行的事务,就抛出异常 |
NESTED |
如果有事务在运行,当前的方法就应该在这个事务的嵌套事务内运行,否则,就启动一个新的事务,并在它自己的事务内运行 |
数据库事务并发问题:
脏读:读到一个无效值。
不可重复读:读第二次和第一次的值不一样。
幻读:读第二次比第一次多了很多行数据。
事务隔离级别:
读未提交(READ UNCOMMITTED):允许读取事务未提交的修改
读已提交(READ COMMITTED):在实际的开发中用的最多,oracl的默认隔离级别。要求只能读取已提交的修改
可重复读(REPEATABLE READ):mysql的默认隔离级别。确保可以多次从一个字段读取到相同的值
串行化(SERIALIZABLE):确保可以多次在一个表中读取到相同的行
事务隔离级别越高,性能越低。
mysql支持以上四个隔离级别
orcal只支持2,4.