搜公众号
推荐 原创 视频 Java开发 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库
Lambda在线 > java开发架构师 > mysql学习十四之mysql的事务操作

mysql学习十四之mysql的事务操作

java开发架构师 2019-02-11
举报

一、什么是事务?

首先要先讲一个例子,银行的转账业务步骤:A同学向B同学转账50元。

1、首先A同学要往B同学转账,A同学账户先减去50元.

2、B同学账户增加50元。

3、若操作成功就提交事务。若操作失败就回滚到开始的位置,也就是说回滚到A同学转账之前。

事务是由一组SQL语句来操作单元,组内所有sql语句共同完成一个业务。如果整组成功,意味着全部SQL都实现。如果其中任何sql语句执行失败,那么意味着整个操作失败。意味着整个过程都没有意义,然后回到操作以前的状态。

二、事务是如何处理的?

1、失败后,可以回到开始位置。

2、没都成功之前,别的用户(进程,会话)是不能看到操作内的数据修改的。

思路就是在一组操作之间设置一个记号,用于备份,该记号相当于一个备份点。

三、事务的实现

事务的实现是利用了mysql数据库的innodb存储引擎的事务日志功能。

mysql的事务日志功能分成两个阶段:

1、执行阶段

2、将执行结果,提交到数据库的阶段。

mysql的数据库日志就是用来保存执行阶段的结果,如果用于选择提交,这才将结果提交到数据库。默认的执行方式叫:自动提交。执行完毕,自动完成提交工作。

如果要开启事务,那么首先要关闭自动提交功能。

1、查看自动提交是开还是关闭

 
   
   
 
  1. show variables like 'autocommit';


2、开启自动提交

 
   
   
 
  1. set autocommit=1;

关闭自动提交:

 
   
   
 
  1. set autocommit=0;

如果关闭了自动提交,当执行sql语句时,执行完后其他用户查看数据库时并没有什么变化。改变的只是操作用户的数据库的内容。之所以其他用户没有发现问题是因为该事务没有完成,没有提交。

此时的数据库会自行判断所有的操作语句是否都执行成功,如果成功就将结果提交,失败就回到开始位置。利用commit,和回滚操作rollback。

3、其实不需要用set autocommit=0;这个语句,这个语句有个弊端,就是一旦执行了这个语句,整个数据库都是关闭自动提交。其他用户想执行自动提交的sql语句,也不行。

这里有更好的事务操作指令。

开启事务:Start trantransaction;这个开启事务,解决了另一个开启事务的弊端问题。提交后(无论成或失败)自动关闭事务。开启自动提交。成功用commit语句,失败用rollback语句。

四、事务的特点

原子性:是指事务的操作是不可分割的,也就是说,这个事务是多条sql语句构成,这些事务只有都执行成功了,才叫成功,否则就叫失败。没有一半的成功,一半的失败。

一致性:是指事务在执行时不允许其他进行操作,比如事务还没有提交,但是其他用户会操作数据库,这样就会由于事务没有操作完成而操作失败。

隔离性:隔离性是指事务的隔离性,两个用户对数据库进行操作,互不影响。

持久性:即事务一旦提交,就不能发生回滚了,因为提交事务后相当于已经完全映射到数据库了。

ACID属性。atomicity,   consistency  ,isolation,   durability.

五、事务操作步骤

1、开启事务

2、书写需要的一组sql语句

3、提交事务。完成


版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《mysql学习十四之mysql的事务操作》的版权归原作者「java开发架构师」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注java开发架构师微信公众号

java开发架构师微信公众号:gh_8d9111e8b99f

java开发架构师

手机扫描上方二维码即可关注java开发架构师微信公众号

java开发架构师最新文章

精品公众号随机推荐

举报