美文网首页
事务的骚操作

事务的骚操作

作者: 阿Q说代码 | 来源:发表于2020-10-27 22:19 被阅读0次

​不知道大家对事务了解多少?如果大家使用过数据库,使用过sql进行过查询语句的编写,那么对事务应该也有所耳闻吧,接下来就给大家讲解一下事务的相关内容(如果大家对数据库的相关概念还不是很熟悉的话,可以在后台留言,抽空阿Q会将其进行整理,一并分享给大家)。

首先是事务的概念:一件事情由n个组成单元,这n个组成单元要么同时成功,要么同时失败,这就是将n个组成单元放到一个事务中了。举个简单的例子:在不考虑试题正确与否的前提下,一张试卷由多个题目构成,当你答完题交给老师的时候是将一整张试卷交给老师,而不是将每道题单独交给老师,在这里试卷就可以理解成一个事务。

事务的操作一般分为开启事务、事务提交和事务回滚。让我们看一下平时见到的事务都有哪些。

mysql中的事务
1)显示的开启一个事务:start transaction
2)事务提交:commit代表从开启事务事务提交中间的所有的sql都认为有效,真正的更新数据
3)事务的回滚:rollback 从开启事务事务回滚中间的所有的sql操作都认为无效数据,没有被更新

JDBC事务操作
开启事务:conn.setAutoCommit(false);
提交事务:conn.commit();
回滚事务:conn.rollback();
注意:执行sql的connection与开启事务的connnection必须是同一个才能对事务进行控制

DBUtils事务操作
无参构造可以开启事务:QueryRunner runner = new QueryRunner();
无参的构造没有将数据源(连接池)作为参数传入QueryRunner,那么我们在使用QueryRunner对象操作数据库时要使用有Connection参数的方法runner.update(conn,sql);

接下来就介绍一下事务的特性(ACID),这四个特性一般在面试题中会被问到,需要记忆一下:

1)原子性(Atomicity)原子性是指事务是一个不可分割的工作单位,事务中的操作,要么都发生,要么都不发生;

eg:拿购物来说吧,假设你在购物车里添加了两件衣服:鞋子+裤子,当你把两件衣服作为一个订单提交支付的时候,要么两件衣服一起支付成功,要么都失败,不可能存在衣服付完钱了,鞋子还没付完的情况,反之亦然。

2)一致性(Consistency)一个事务中,事务前后数据的完整性必须保持一致;

eg:拿转账来说,假设用户A和用户B两者的钱加起来一共是20000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是20000,这就是事务的一致性。

3)隔离性(Isolation)多个事务,事务的隔离性是指多个用户并发访问数据库时,一个用户的事务不能被其它用户的事务所干扰,多个并发事务之间数据要相互隔离;

eg:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行。

4)持久性(Durability)持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。

eg: 例如我们在使用JDBC操作数据库时,在提交事务方法后,提示用户事务操作完成,当我们程序执行完成直到看到提示后,就可以认定事务以及正确提交,即使这时候数据库出现了问题,也必须要将我们的事务完全执行完成,否则就会造成我们看到提示事务处理完毕,但是数据库因为故障而没有执行事务的重大错误。

在许多事务处理同一个数据时,如果没有采取有效的隔离机制,那么并发处理数据时,会带来一些的问题。

隔离性引发并发问题
1)脏读:B事务读取到了A事务尚未提交的数据;
2)不可重复读:一个事务中两次读取的数据的内容不一致;
3)幻读/虚读:一个事务中两次读取的数据的数量不一致;

事务的隔离级别
1)read uncommitted : 读取尚未提交的数据 :哪个问题都不能解决
2)read committed:读取已经提交的数据 :可以解决脏读 ---- oracle默认的
3)repeatable read:重读读取:可以解决脏读和不可重复读 ---mysql默认的
4)serializable:串行化:可以解决脏读、不可重复读和虚读---相当于锁表(如有疑问想提前了解锁表机制,可以提问哟)

查看mysql数据库默认的隔离级别:select @@tx_isolation
设置mysql的隔离级别

例子:设置事务隔离级别+读未提交
set session transaction isolation level read uncommitted;

好了以上就是今天的内容了,想了解更多学习知识,请关注微信公众号“阿Q说”,获取更多学习资料吧!你也可以后台留言说出你的疑惑,阿Q将会在后期的文章中为你解答。每天学习一点点,每天进步一点点。

相关文章

  • 事务的骚操作

    ​不知道大家对事务了解多少?如果大家使用过数据库,使用过sql进行过查询语句的编写,那么对事务应该也有所耳闻吧,接...

  • 事务、MySQL与Python交互、Python 中操作 MyS

    1、事务 事务操作分两种:自动事务(默认)、手动事务 手动事务的操作流程 开启事务:start transacti...

  • 骚操作

    文‖茹云 心里想说,却被人生生贴胶带,本来以为可以诉说一下心里的难受与舒服,结果被这样的骚操作,一阵懵逼。 不知道...

  • 骚操作

    突然想哭的时候,你会有哪些操作? 成年人的世界不容易呀,总有那么几个瞬间特别想哭,那么你们有什么样的骚操作呢? 支...

  • 骚操作

    先说下近期的三个项目,这三个项目是造成我骚操作的主要原因。近期的三个项目分别是: A、5月13日-5月20...

  • 骚操作

    无语仰望天。 就在风向晚为自己回国后的经历感到无奈至极时,一道痞坏痞坏的声音幽幽传来。 “嘿,美女,喜欢喝奶茶?哥...

  • 骚操作

    一路上,沈青石都保持了沉默闭目养神,不言不语。这在秦子衿的眼里,他是又恢复了病弱清冷的模样。 直到车子驶入天玺沈宅...

  • 骚操作

    不知简书啥时新开了"骚操作":随时给你一脸的烂广告,喊你点点点,不点还不行!刚开始还怀疑是我的手机中了毒,后来发现...

  • MySQL数据库的事务transaction

    事务操作分两种:自动事务(默认)、手动事务 手动事务的操作流程 开启事务:start transaction; 进...

  • linux常用命令

    grep管道 分屏操作 基础命令 骚操作

网友评论

      本文标题:事务的骚操作

      本文链接:https://www.haomeiwen.com/subject/evsfvktx.html