面试-数据库
数据库
acid
原子性 要么全部完成,要么完全不起作⽤;
一致性 多个事务对同⼀个数据读取的结果是相同的;
隔离性 ⼀个⽤户的事务不被其他事务所⼲扰
持久性 改变是持久的,发⽣故障也不应该对其有任何影响
脏读(Dirty read)写完之后再读
丢失修改(Lost to modify) 写操作的冲突,解决办法是一个一个地写
不可重复读(Unrepeatableread)读写操作的冲突,解决办法是读完再写,重点是修改
幻读(Phantom read)读写操作的冲突,解决办法是读完再写,重点在于新增或者删除
原因:快照读和当前读冲突。
读未提交:未提交的都能读,所以啥都解决不了
读已提交 :只能读已经提交的,解决脏读
可重复读:读的那行记录不允许其他事务修改,所以解决不可重复读
串行化:全部事务按顺序执行,啥都解决了
spring事务失效场景
https://blog.csdn.net/mccand1234/article/details/124571619
因为spring事务,默认情况下只会回滚RuntimeException(运行时异常)和Error(错误),对于普通的Exception(非运行时异常),它不会回滚。比如常见的IOExeption和SQLException。所以,建议一般情况下,将该参数设置成:Exception或Throwable。
- 异常父类Throwable
- error
- exception
- 非运行时异常
- IoException
- FileNotFoundException
- IoException
- RuntimeException
- NullpointException
- ArithmeticException
- 非运行时异常