当前位置: 首页 > news >正文

大屏网站做响应选择一个域名进行网站建设

大屏网站做响应,选择一个域名进行网站建设,手机网站界面设计,有动态图片的网站源码一、MySQL 事务定义 MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在银行管理系统中,用户张三向李四账户转账的操作,账户转账是一个完整的业务,最小的单元,不可再分,这样&#xff0c…

一、MySQL 事务定义

        MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在银行管理系统中,用户张三向李四账户转账的操作,账户转账是一个完整的业务,最小的单元,不可再分,这样,完成转账操作的这些SQL语句之和就构成一个事务!

        总的来说,

  • 在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。
  • 事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。
  • 事务通常用来管理 insert(增)、update(改)、delete(删) 语句。

二、事务满足四个条件

事务是必须满足4个条件原子性、一致性、隔离性、持久性。

        1.原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。

        例如:当事务在执行过程中发生错误时,已经被修改过的数据会回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。

        2.持久性:当一个事务处理结束后,会进行commit提交操作,将处理后的数据从内存提交到磁盘中,保证数据的持久化存储。

        3.一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则。

        4.隔离性:事务通常都是并发的,不同事务会同时对数据库中的数据进行读写和修改,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。

        事务的隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。

三、MySQL中事务管理的相关SQL指令:

  • START TRANSACTION :显式地开启一个事务;

  • COMMIT :事务提交,将事务更新后的数据从内存保存进磁盘中,实现数据的持久保存;

  • ROLLBACK :事务回滚,结束当前正在进行的事务,并将已经修改但未提交的数据回滚到事务开始之前的状态;

  • SAVEPOINT 【标记点】该指令允许在事务中创建一个保存点,一个事务中可以有多个 SAVEPOINT;

  • RELEASE SAVEPOINT 【标记点】 删除一个事务的保存点,当没有指定的保存点时,执行该语句会抛出一个异常;

  • ROLLBACK TO 【标记点】把事务回滚到标记点;

  • SET TRANSACTION 用来设置事务的隔离级别。

    InnoDB 存储引擎提供事务的隔离级别有READ UNCOMMITTED(读未提交)、READ COMMITTED(读提交)、REPEATABLE READ(可重复读) 和 SERIALIZABLE(串行化)。

其中我们最常用的两条语句就是commit事务提交和rollback事务回滚。

四、在MySQL中演示,简单事务提交与回滚

业务情形:id为1的用户(张三) 给 id为2的用户(李四) 转账100元

①首先有一张bank的表,所有用户的钱初始值都是200元

②在不开启事物的情况下

1.模拟转张操作(SQL代码)

#不开启事物的情况下:1.执行转张操作所需要的SQL语句
update bank SET money = money-100 WHERE id = 1;
update bank SET money = money+100 WHERE id = 2;

若未出现异常情况,该项转账业务成功执行;两个用户的钱发生正确变化;

2.模拟中途出现异常(SQL代码)

#首先,自定义一个异常叫money_error
DECLARE money_error CONDITION FOR 1148;2.模拟中途出现异常,转张执行失败
update bank SET money = money-100 WHERE id = 1;
money_error;
update bank SET money = money+100 WHERE id = 2;

如图所示,若中途出现异常,执行失败:发现数据只更改了一半,张三的钱少了,但收款方李四账户并没有多出100元

 

        像上述这种情况,在实际项目开发中肯定是不允许出现的,因此我们可以借助Mysql数据库中的事务管理,将转账这两条SQL语句封装成一条事务,使其具有不可分割性(原子性);

③使用MySql中事务管理,来模拟转账操作

  • 当开启事务管理后,若执行过程中遇到异常,那么被修改但未提交的数据则会回滚到初始值;

执行之前,两人都是200元;

1.模拟开启事务后执行转账操作

#开启事物管理---执行成功则提交到磁盘
start TRANSACTION;
update bank SET money = money-100 WHERE id = 1;
update bank SET money = money+100 WHERE id = 2;
commit;

当事务正常执行并提交(commit),两人的钱会发生对应的变化 

 

2.模拟转账操作执行过程中出现异常

#定义一个异常叫money_error
DECLARE money_error CONDITION FOR 1148;#开启事物管理---执行失败则会回滚到初始数据
start TRANSACTION;
update bank SET money = money-100 WHERE id = 1;
money_error;
update bank SET money = money+100 WHERE id = 2;
ROLLBACK;

当转账遇到异常时,进行事务回滚,两人的金额仍然是200元。

        通过以上的简单模拟,我们已经对事务有了一定了解;接下来让我们学习,如何在MyBatis中进行事务管理操作。

五、事务管理与MyBatis结合

前提:已经构建好MyBatis框架

①.首先我们创建一个用户表,用户初始余额都为200元

②编写转账操作对应SQL语句:

<!--  转账事物管理  --><!--  汇款人  --><update id="outMoney" parameterType="List" >update user set money = money-#{money} where id = #{id}</update><!--  收款人  --><update id="acceptMoney" parameterType="List" >update user set money = money+#{money} where id = #{id}</update>

③然后编写Dao层接口方法:

//事物管理测试://对于mapper的Dao层的接口,传入的参数有多个时必须使用@param进行标识,//汇款public void acceptMoney(@Param("money") float money,@Param("userId") Integer id);//收款public void outMoney(@Param("money")float money,@Param("userId")Integer id);

④最后是,转账业务的测试代码:

  • 无异常情况的情况下:
//首先是正常执行转账操作,没有异常时
public void transfer(){try{System.out.println("转账前:");mapper.findAll();//执行转张mapper.outMoney(100,1);mapper.acceptMoney(100,2);session.commit();//当未捕捉到任何异常时,提交事务System.out.println("转账后:");mapper.findAll();}catch (Exception e){e.printStackTrace();session.rollback();//一旦捕捉到异常,则将事务回滚}finally {if (session != null) {session.close();//最后释放资源}}}
  • 模拟一个转账异常

 @Testpublic void transfer(){try{System.out.println("转账前:");findAll();//执行转张mapper.outMoney(100,1);int x = 1/0; //模拟一个异常mapper.acceptMoney(100,2);session.commit();//当未捕捉到任何异常时,提交事务System.out.println("转账后:");findAll();}catch (Exception e){e.printStackTrace();session.rollback();//一旦捕捉到异常,则将事务回滚}finally {if (session != null) {//最后释放资源session.close();}}

⑤测试运行结果

  • 正常执行转张操作:

      

  • 若转账中途出现异常:

         当出现异常,转张操作会被中断,然后事务回滚;我们查看数据库,每个人的前仍为初始值200元。

        以上就是事务在实际开发过程中的应用,本篇文章是我在学习完数据库事务管理后的总结与笔记,如果大家喜欢,请多多点赞;若有错误,欢迎指正;

拓展:多事务之间并发可能会导致的问题:     

①脏读:

       ②不可重复读

                          
           ③幻读         

   

参考文章:

MySQL——事务(Transaction)详解_mysql事务-CSDN博客

MySQL 事务 | 菜鸟教程

http://www.yayakq.cn/news/525628/

相关文章:

  • 网站后台账户如何做会计分录wordpress 无缩略图插件
  • erp管理系统介绍seo数据优化教程
  • 不会代码可不可以做网站郓城网站建设价格
  • 交易 网站备案山西有新冠病例吗
  • wordpress地址站点地址网站建设的实验总结
  • 网站运营需要哪些知识html5网站地址
  • 设计师国外网站wordpress插件html5
  • 手机网站如何做wordpress管理页面
  • wordpress手机站和pc如何切换的金山网站安全检测
  • 做网站电话销售说辞影视网站建设平台
  • 现在什么类型网站没有人做做网页前端需要学什么
  • 宁波市省网站建设chrome手机版
  • 购物网站 服务器 带宽 多大wordpress提交评论卡死
  • 自助设计网站游戏推广赚佣金
  • 网站推广品牌建设网络推广的方法有哪几种
  • 外国网站欣赏买房子平台
  • 网页网站作业制作企业邮箱怎么获取
  • 长春精神文明建设网站防封号电销系统
  • 门户网站前期网络采集商家信息免费发布网站流量分析指标
  • 网站维护内容有哪些全屋装修设计软件
  • 做网站的软件去哪里买百度提交网址
  • 宠物交易网站开发河南网站建设推荐
  • 网站功能需求怎么写网站建设合作合同模板
  • 国内精品网站建设效果图制作多少钱一张
  • 网站权重多少比较好群晖nas做网站性能
  • 用网站做微信公众号岳阳网站开发商城
  • 扁平式的网站电商网站建设市场分析
  • 南宁网站建设王道下拉強wordpress 3清新主题
  • 网站美食建设图片公众号小程序制作流程
  • 自贡企业网站建设公司学做宝宝衣服的网站