首页 > 数据库 >数据库事务

数据库事务

时间:2023-11-17 16:26:28浏览次数:35  
标签:事务 隔离 幻读 数据库 脏读 运行

事务的四个属性

事务的传播属性

事务并发问题

数据库锁机制

事务隔离级别

事务的传播属性

当一个事务方法被另一个事务方法调用时,应指定该事务如何传播,例如是在当前事务运行还是再开启一个事务运行

用注解 @Transactionl(propagation=*) 声明传播方式

      七种传播属性
REQUIRED                如果有事务在运行,当前的方法就在这个事务内运行,否则就启动一个新的事务,并在自己的事务内运行
REQUIRED_NEW      当前方法必须启动事务,并在它自己的事务内运行,如果有事务正在运行,应该将他挂起
SUPPORTS                如果有事务在运行,当前的方法就在这个事务内运行,否则他可以不运行在事务中
NOT_SUPPORTE      当前的方法不应该运行在事务中,如果有运行的事务,将他挂起
MANDATORY             当前的方法必须运行在事务内部,如果没有正在运行的事务,就抛出异常
NEVER                       当前方法不应该运行在事务中,如果有运行的事务,就抛出异常
NESTED                     如果有事务在运行,当前的方法就应该在这个事物的嵌套事务内运行,否则,就启动一个新的事务,并在它自己的事务内运行

事务的四个属性——ACID

  • 原子性(Atomicity)

将一个事务中的操作看作一个原子,具有不可分割性,要么全部成功,要么全部失败,中途失败要进行事务的回滚

  • 一致性(Consistency)

    事务必须使数据库从一个一致性状态变换到另外一个一致性状态,数据库的一致性是建立在原子性的基础之上的

  • 隔离性(Isolation)

    通常,数据库是由多用户并发访问,应为每个用户各自开启一个事务,对用户进行隔离保证相互之间无干扰。数据库定义了各种隔离级别,以在并发性和数据完整性中权衡

  • 持久性(Durability)

    事务完成后,对数据库的改变应是永久的,不会因为其他原因更改或丢失,即使是硬件问题,也应可以通过在日志中记录事务完成的任务进行重建

事务并发问题

  • 脏读:一个事务读取另一个事务未提交的数据
  • 不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同,我们称之为不可重复读。这个事务在两次读取之间该数据被其它事务所修改
  • 幻读:一个事务按相同的查询条件重新读取以前检索过的数据,却发现其他事务插入了满足其查询条件的新数据
  • 第1类丢失更新(回滚丢失):一个事务进行撤销回滚时,将另一事务的更新也撤销了
  • 第2类丢失更新(覆盖丢失):一个事务更新覆盖另一事务的更新数据,造成另一事务所做的操作丢失

数据库锁机制

数据库通常会通过锁机制来解决数据并发访问问题,

   按锁类型划分,可分为共享锁排他锁

        按锁的粒度划分,可分为表级锁行级锁页级锁

        按使用机制划分,可分为乐观锁悲观锁

直接使用锁非常麻烦,为此数据库为用户提供了自动锁机制,用户指定会话的事务隔离级别(稍后补上)

事务隔离级别

  • Read Uncommited,读未提交,数据库最弱的隔离级别(完全不隔离),存在脏读、不可重复读、幻读的诸多问题
  • Read Commited,读已提交,一个事务要等到另一个事务提交后才能读取数据;解决脏读问题;还可能会出现不可重复读、幻读
  • Repeatable Read,可重复读,读取数据的事务将会禁止写事务(但允许读事务),写事务则禁止任何其他事务;解决脏读和不可重复读问题;还可能会出现幻读,Mysql默认级别
  • Serializable,可序列化,最高的事务隔离级别,事务串行化顺序执行;避免脏读、不可重复读与幻读;但效率低,一般不用

 

标签:事务,隔离,幻读,数据库,脏读,运行
From: https://www.cnblogs.com/liyou555/p/17839018.html

相关文章

  • JAVA解析Excel文件 + 多线程 + 事务回滚
    1.项目背景:客户插入Excel文件,Ececel文件中包含大量的数据行和数据列,单线程按行读取,耗时大约半小时,体验感不好。思路:先将excel文件按行读取,存入List,然后按照100均分,n=list.szie()/100+1;n就是要开启的线程总数。(实际使用的时候,数据库连接池的数量有限制,n的大小要结合数据库连......
  • JAVA 解析Excel + 多线程 + 事务回滚(2)
    该方法为网上查询,感觉可行,并未真正尝试。主线程:packagecom.swagger.demo.service;importcom.alibaba.excel.context.AnalysisContext;importcom.alibaba.excel.event.AnalysisEventListener;importcom.swagger.demo.config.SpringJobBeanFactory;importcom.swagger.demo.m......
  • 数据库系列:事务的4种隔离级别
    数据库系列:MySQL慢查询分析和性能优化数据库系列:MySQL索引优化总结(综合版)数据库系列:高并发下的数据字段变更数据库系列:覆盖索引和规避回表数据库系列:数据库高可用及无损扩容数据库系列:使用高区分度索引列提升性能数据库系列:前缀索引和索引长度的取舍数据库系列:MySQL引擎My......
  • 浅析开源数据库MySQL架构
    数据库是所有应用系统的核心,故保证数据库稳定、高效、安全地运行是所有企业日常工作的重中之重。数据库系统一旦出现问题无法提供服务,有可能导致整个系统都无法继续工作。所以,一个成功的数据库架构在高可用设计方面也是需要充分考虑的。下面就为大家介绍一下如何构建一个高可用的M......
  • 精彩回顾|从架构到实践,AntDB融合型数据库揭秘
    当今社会中的信息除了“多”,人们对于“效率”和“速度”的要求也越来越高。譬如,对于很多企业决策者来说,在当前的经济形势下需要尽一切可能降本增效。过去每周看看经营报表的习惯,现在慢慢转变为实时可视化分析企业当前的经营状况。基于此,亚信安慧AntDB融合型数据库,为了支持用户对“......
  • 2023年11月中国数据库排行榜:OPO组合持续两月,亚信、中兴闯进前十
    长夜之中蓄力待,势如破晓初光披。 2023年11月的 墨天轮中国数据库流行度排行 火热出炉,本月共有283个数据库参与排名。本月排行榜前十名变动较大,TiDB上升一位居第4,达梦奋勇向前重归第6,亚信AntDB、中兴GoldenDB势如破竹进军10强。 墨天轮十巨头之争白热化,中国数据库行业将迎......
  • 事务注意事项
    校验事务是否生效debug方法:org.springframework.transaction.interceptor.TransactionAspectSupport#invokeWithinTransaction锁跟事务一起使用时一般业务来说都是锁的范围要包含事务的范围,不要等锁释放了,再提交事务;如果锁是使用注解方式跟@Transactional一起使用要注......
  • 记一次mysqlbinlog恢复数据库数据
    因为一些意外操作,用旧的备份覆盖了最新的数据库数据,导致最近几天内的数据被覆盖掉了。百度了一圈。。用mysqlbinlog恢复比较靠谱,网上查感觉操作也比较简单。。实际吧。费点劲。。 MySQL的Binlog是用于记录数据库中所有操作的日志文件。通过检查日志文件,可以找到误删除的......
  • SqlServer中获取数据库中每个表的行数
    SqlServer中获取数据库中每个表的行数CREATETABLE#RowCounts(NumberOfRowsBIGINT,TableNameVARCHAR(128))EXECsp_MSForEachTable'INSERTINTO#RowCountsSELECTCOUNT_BIG(*)ASNumberOfRows,''?''asTableNameFROM?'SELECTTableName,Numbe......
  • Lumen框架 之数据库迁移
    一、基本操作1、/database/migrations/目录下生成一个php文件,这个文件主要包括两个函数,在up()函数中根据你的需求定义数据库字段phpartisanmake:migrationcreate_users_table--create=users<?phpuseIlluminate\Database\Migrations\Migration;useIlluminate\Database\Sch......