提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、事务的基础?
1.事务的特性
- A(原子性):同一个事务内的操作是原子性的,要么全都提交,要么全都回滚;
- C(一致性):事务内的所有事件在执行前后都将处于一致性的,不能存在一部分提交的状态;
- I(隔离性):多个事务之前应该是互相独立不影响的;
- D(持久性):事务一旦提交就应该处于持久化状态;
2.事务的隔离级别
- read uncommitted(读未提交):顾名思义就是在事务中可以读到其它事务还没有提交的更新,会导致dirty read(脏读),fuzzy read(不可重复读),phantom(幻读);
- read committed(读已提交):事务中能读取到其它事务已提交的数据,解决了dirty read,但是仍然会存在fuzzy read在同一个事务中两次读取同一个值得到不同结果;
- repeatable(可重复读,mysql默认隔离级别):解决了fuzzy read问题,及在事务中读取的数据会被加锁,其它事务无法进行修改。
- Serializable(可串行化):解决phantom(幻读)问题,及解决了在读取一批数据时,其它事务执行插入操作,而当前事务查询前后数据数量不一致问题;使用间隙锁实现或直接锁表;
3.Spring事务的传播特性(spring特有的封装)
-
request:外部抛异常,内部事务回滚。内部抛异常就算外部方法捕获并处理了异常,外部事务也会回滚;(同一个事务,一旦有异常就回滚)
-
request-new:外部抛异常,内部事务不回滚。内部抛异常只要外部方法捕获并处理了异常,外部事务不会回滚;(不同事务,有异常不往外抛则外部事务不会回滚)
-
nested:外部抛异常,内部事务回滚。内部抛异常只要外部方法捕获并处理了异常,外部事务不会回滚;(嵌套事务,内部异常处理后可以单独回滚,外部异常之前全部回滚)
-
supports:如果有事务则加入和request一样,如果没有事务就以非事务的形式运行(request会新开一个事务)
-
not_supports:以非事务的方式运行,如果有事务就挂起;
-
never:如果有事务就报错
-
mandatory:如果没有事务就报错
二、源码解析
1.SpringAop/事务 解析主流程
2.SpringAop/事务 调用主流程
总结
流程比较抽象,主要用于个人总结,后续有时间会进行完善;