栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

数据库事物

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据库事物

@Transaction(propagation="REQUIRED")  
  事物的传播特性
  是指多个事物方法在相互调用时,事物如何在这些方法传播(默认是REQUIRED)
  
  1.REQURED
    要求当前事物方法必须在事物中,存在事物则加入事物、没有则创建
 
    SUPPORTS(1),
    MANDATORY(2),    必须在事务中运行,如果当前事务不存在,则会抛出一个异常。不会主动开启一个事务
    REQUIRES_NEW(3),
    NOT_SUPPORTED(4), 不应该运行在事务中,如果存在当前事务,在该方法运行期间,当前事务将被挂起
    NEVER(5),         已经存在一个事务,那么该方法将会在嵌套事务中运行。嵌套的事务可以独立于当前事务进行单独地提交或回滚
    NESTED(6);
    
  2.事物的ACID 特性 
    【1.原子性
    
    【2.隔离型:2个事物的执行都是独立隔离开来的,当多事物操作同一个对象时会以串行等待的方式保证事物之间是隔离开来的
    
    【3.一致性:执行成功则整体成功,不然整体回到事物前的状态
    
    【4.持久性:一旦执行成功,不会丢失
    
  3.事物并发与事物隔离
     事物的隔离是通过锁来实现的,一个事物对数据进行修改时,会对数据加锁,只有该事物提交后,其他事物才能进行加锁
     
     事物并发问题与事物的隔离级别(不同的隔离级别 解决不同问题)
     
     【1.READ_UNCOMMITED, 防止了脏写,事物对数据进行修改时,会加写锁,其他事物无法获取锁阻塞
     
     【2.REDA_COMMITED,防止了脏读,2个事物并发执行,一个修改已经加写锁成功,另一个加读锁(REDA_COMMIt)就会失败则阻塞等待。
                     读锁读取数据结束后就会释放锁(事物还未结束)
     
     【3.REPEATABLE_READ ,防止了不可重发读。在事物并发的时,在一个事物中多次读取数据,多次读取的结果不一样:因为READ_COMMITED 级别下,读取完事物会马上释放读锁;
                        REPEATABLE_READ 在事物结束后才释放锁
                        
     *****前面的写操作,都指的是更新、删除,不包括insert 以为当时是无数据的,没法对还不存在的数据加锁
     
     【4 SERIALIZABLE  防止幻读,因为是insert ,没对表记录加锁,只能锁整张表,所有事物串行执行
                    或间隙锁可以阻止
    4. 为什么说MySQL单表数据不要超过500万行

     这是阿里测试得出的数据,其实这跟索引、硬件内存的大小有关,当表中的索引太大,内存无法全部加载时(InnoDB buffer size 足够的情况下,其能完成全加载进内,没有问题),就只能存在磁盘上,性能自然下降。

      建议:大表(数据量大、容量大)。先拆成主表(字段多)、detail表(容量高)。主表严格控制索引的质量,detail表只能用主键ID查(后期可以通过主键ID分表)
      https://www.cnblogs.com/iullor/p/12434379.html
  
  
  

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/831089.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号