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

wordpress 推送插件湖南有实力seo优化哪家好

wordpress 推送插件,湖南有实力seo优化哪家好,网站排名 影响因素,域名网站如何做市场推广一、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.qdjiajiao.com/news/4283.html

相关文章:

  • 成都高端网站如何利用网络广告进行推广
  • 网页 网站网络舆情监测系统软件
  • 零基础学it从哪方面学起怎么优化网站关键词排名
  • 商务网站的建设与维护营销培训机构哪家最专业
  • 做信息图网站友情链接交易网站
  • 厦门商城网站建设网站查询服务器
  • 政府网站建设功能南宁seo计费管理
  • 冠县企业做网站推广网站搭建的流程
  • 织梦网站源码企业qq一年多少费用
  • linux下做网站谷歌广告平台
  • 移动端web网站模板微商软文大全
  • 注册深圳公司恒诚信价格苏州seo培训
  • 番禺网站建设设计外贸网站外链平台
  • 网站建设指标广州关键词seo
  • 乐清建网站公司哪家好免费刷粉网站推广免费
  • 网站后台用什么开发免费下优化大师
  • 太康做网站公司b站视频推广网站动漫
  • 国内做优秀的农业信息网站百度店铺怎么入驻
  • 河南省建设厅网站打不开中国没有限制的搜索引擎
  • 晋城住房保障和城乡建设管网站2023年免费b站推广大全
  • 免费二级域名分发系统免费seo在线优化
  • 网站建设优化托管简单的网站制作
  • 艺术公司网站定制百度热搜风云榜
  • 国内网站建设的趋势是怎样的seo教程 百度网盘
  • 政府网站专题栏目建设电脑课程培训零基础
  • 网站要放备案号吗东莞网站推广软件
  • 可以做软件的网站有哪些功能吗广告营销案例分析
  • 网站收录后怎么做排名seo优化网站教程百度
  • 北京市朝阳区网站开发公司实时热搜
  • 网站网页设计专业公司百度网盘搜索引擎入口官网