数据库事务

  • 数据库事务
  • jdbc事务
  • 事务的ACID
    • 数据库的并发
    • 数据库的四种隔离级别

数据库事务

数据库事务( transaction)是访问,并可能操作各种数据项的,一个数据库操作序列,这些操作要么,全部执行,要么,全部不执行,是一个不可分割的,工作单位。事务由事务开始,与事务结束之间执行的,全部数据库操作组成。

比如,我们去银行转账,操作可以分为下面两个环节:
(1)从第一个账户划出款项。
(2)将款项存入第二个账户
在这个过程中,两个环节是关联的。第一个账户划出款项必须保证正确的存入第二个账户,如果第二个环节没有完成,整个的过程都应该取消,也就是说,第一个账户转出去的钱要回到第一个人的账户中,称为数据回滚,否则就会发生丢失款项的问题。整个交易过程,可以看作是一个事物,成功则全部成功,失败则需要全部撤消,这样可以避免当操作的中间环节出现问题时,产生数据不一致的问题。

jdbc事务

  • 数据一旦提交,就不能再回滚。
  • 数据什么时候意味着提交?
    • 当对象被创建时,默认情况自动提交事务:每次执行一个 SQL 语句,如果执行成功,就会向数据库自动提交,而不能回滚。
    • 关闭数据库连接,数据自动的提交。如果是多个操作,每个操作使用的是自己单独的连接,则无法保证事务。即同一个事务的多个操作必须在同一个连接下。
  • jdbc中为了可以让多条数据作为一个事务同时提交,我们三个方法必须要知道
方法名 描述
setAutoCommit(false) 取消自动提交事务
commit() 提交事务
rollback() 回滚事务

事务的ACID

1.原子性(Atomicity) 操作要么都发生,要么都不发生。
过程:
1、小明:1000-200=800
2、小红:1000+200=1200
原子性表示:不能小明转账了小红没收到,或者小红账上多了200,而小明账上没减少,二者是同时发生的。

2.一致性(Consistency) 事务前后数据完整性保持一致
一致性体现:
1、操作前:小明:1000 小红:1000
2、操作后:小明:800 小红:1200
也就是说这两人操作前后,两个人钱的总数相加都是2000

3.隔离性(Isolation) 事务的隔离性是指一个事务的执行不能被其他事务干扰。就像是两个人走路,你走你的,我走我的,当然了像男女朋友走路手拉着手就刚好是反例,恰恰是两个事务没有隔离
隔离性体现
事务1:操作前:A:200 B:100
操作后 A:100 B:200
事务2:操作前:C:300 D:400
操作后:C:500 D:200

4.持久性(Durability) 持久性是指一个事务一旦被提交,它对数据库中数据的改变,就是永久性的,接下来的其他操作不对之前的操作造成影响。

数据库的并发

  1. 脏读 :脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这个修改还没有提交到数据库中,这时,另外一个事务也访问 这个数据,然后还使用了这个数据。

  2. 不可重复读 :是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两 次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,所以称为是不
    可重复读

  3. 幻读 : 是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。 同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象
    发生了幻觉一样。

数据库的四种隔离级别

隔离级别 脏读 不可重复 幻读
读未提交(read-uncommitted)
不可重复读(read-committed)
可重复读(repeatable-read)
串行化(serializable)
  • Oracle 支持的 2 种事务隔离级别:read-committed, serializable。
    Oracle 默认的事务隔离级别为: read-committed(不可重复读) 。

  • Mysql 支持 4 种事务隔离级别。
    Mysql 默认的事务隔离级别为: repeatable-read(可重复读)

  • 为什么数据库的隔离级别默认是可重复读?
    1.主从复制,是基于什么复制的?
    是基于binlog复制的
    2.binlog有几种格式?
    statement:记录的是修改SQL语句
    row:记录的是每行实际数据的变更
    mixed:statement和row模式的混合

你真的把数据库事务搞懂了吗,有图有真相,图文并茂!相关推荐

  1. 编程中的蛇形填空问题_PCB—蛇形线的作用,这次真的是把你搞懂了

    经常能看到论坛里有人在问蛇形线的问题.平时我们能看到蛇形线的地方大都是一些高速高密度板,好像带有蛇形线的板子就更高级,会画蛇形线就是高手了.网上关于蛇形线的文章也有很多,总感觉有些帖子的内容会误导新手 ...

  2. 搞懂分布式技术19:使用RocketMQ事务消息解决分布式事务

    搞懂分布式技术19:使用RocketMQ事务消息解决分布式事务 初步认识RocketMQ的核心模块 rocketmq模块 rocketmq-broker:接受生产者发来的消息并存储(通过调用rocke ...

  3. 麻烦你先搞懂这几个问题,简历再写熟悉数据库!!!

    原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 本文思维导图 数据库和关系型数据库 作为一个程序员,不了解数据库怎么能行,那么数据库到底是个啥呢,作为一个Java工程师,平时和数据库 ...

  4. 一文搞懂MySQL数据库分库分表

    如果数据量过大,大家一般会分库分表.分库需要注意的内容比较少,但分表需要注意的内容就多了. 工作这几年没遇过数据量特别大的业务,那些过亿的数据,因为索引设置合理,单表性能没有影响,所以实战中一直没用过 ...

  5. 一文搞懂MySQL XA如何实现分布式事务

    一文搞懂MySQL XA如何实现分布式事务 前言 XA 协议 如何通过MySQL XA实现分布式事务 前言 MySQL支持单机事务的良好表现毋庸置疑,那么在分布式系统中,涉及多个节点,MySQL又是如 ...

  6. inputstream重新赋值之前需要close吗_变量提升真的搞懂了吗?打脸的一道题

    变量提升真的搞懂了吗?打脸的一道题 我们知道JS代码在执行之前,会做一系列的事情,其中就包括变量提升,原本以为把变量提升搞懂的我(因为这两天一直在研究变量提升,自我感觉已经很良好了,哈哈哈),拿到了一 ...

  7. 25 张图,1.4 w字!彻底搞懂分布式事务原理

    本文提纲如下: 0. 前言 1. 单数据源事务 & 多数据源事务 2. 常见分布式事务解决方案 2.1. 分布式事务模型 2.2. 二将军问题和幂等性 2.3. 两阶段提交(2PC) & ...

  8. 一文读懂什么是数据库事务

    1.什么是事务 首先说一下什么是事务. 事务(Transaction)指一个操作,由多个步骤组成,要么全部成功,要么全部失败. 比如我们常用的转账功能,假设A账户向B账号转账,那么涉及两个操作: (1 ...

  9. 分布式事务详解【分布式事务的几种解决方案】彻底搞懂分布式事务

    文章目录 一.基本概念 什么是事务 本地事务 分布式事务 分布式事务产生的场景 二.分布式事务基础理论 CAP理论 CP - Consistency/Partition Tolerance AP - ...

  10. 直击美团“远程面试”现场,面试官竟反问:你真懂数据库事务吗?

    为什么要记录这次面试经历? 疫情形势仍然十分严峻,很多企业在招聘时会采取网络面试或是远程面试的方式来保证面试流程的顺利进行.马上就要迎来金三银四,希望你们同我一样,面试顺利,顺利拿下自己心仪的offe ...

最新文章

  1. 如何新增或修改ns2的核心模組--queue management
  2. MySql 长时间读数据发生超时的异常 Mysql Reader Exception TimeOut expired
  3. 安踏半年劲收超228亿 再创中国运动品牌新高
  4. 手机淘宝轻店业务 Serverless 研发模式升级实践
  5. 【最新合集】PAT乙级最优题解(题解+解析+代码)
  6. linux内核那些事之buddy(慢速申请内存__alloc_pages_slowpath)(5)
  7. TensorFlow 1.9.0正式版来了!新手指南全新改版,支持梯度提升树估计器
  8. 阿里大数据运维新成员——24小时待命!有求必应!能说会做!...
  9. apex创建快捷方式_盖伦下载的Origin平台、Apex游戏手动添加快捷方式
  10. sql 分组 行列转换
  11. 三星note10 android q,【极光ROM】-【三星NOTE10/NOTE10+/5G N97XX-855】-【V6.0 Android-Q-TE1】...
  12. oracle cogs 科目,CFA一级财报科目:现金流量表详情介绍!
  13. JS判断数组元素是否重复
  14. ubuntu /home/路径下.cache下清理
  15. 智能合约开发 基于Hardhat(实操)
  16. cassandra java cql_Cassandra CQL v3.3中文文档(下)
  17. netty 多线程用一个长连接(channel) 发送消息 并发安全吗?
  18. GS1011无线模块的使用简介。
  19. maven中archetype(原型)的使用及创建
  20. 微软发布会精华回顾:“台式电脑”抢了风头

热门文章

  1. node.js核心模块
  2. 学习:大文件统计与排序
  3. 3.SRE:Google运维解密 --- 拥抱风险
  4. 2.shell 程序设计(1)
  5. 121. VLD 的使用
  6. 2. node.js 模块管理机制
  7. 18. RSS订阅(RSS Feeds)and price rule
  8. 69. Php部分常见问题总结
  9. background-color:#e5eecc; border:solid 1px #c3c3c3;
  10. Mysql问题1862