MySQL高级④(事务)

网友投稿 279 2022-11-30

MySQL高级④(事务)

文章目录

​​事务简介​​​​事务操作​​​​事务四大特征​​

事务简介

数据库的事务(Transaction)是一种机制、一个操作序列,包含了一组数据库操作命令。事务把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么同时成功,要么同时失败。事务是一个不可分割的工作逻辑单元。

我们可以举一个例子更好的理解事务: 如下图有一张表

张三和李四账户中各有100块钱,现李四需要转换500块钱给张三,具体的转账操作为

第一步:查询李四账户余额第二步:从李四账户金额 -500第三步:给张三账户金额 +500

现在假设在转账过程中第二步完成后出现了异常第三步没有执行,就会造成李四账户金额少了500,而张三金额并没有多500;这样的系统是有问题的。如果解决呢?使用事务可以解决上述问题

从上图可以看到在转账前开启事务,如果出现了异常回滚事务,三步正常执行就提交事务,这样就可以完美解决问题。

开启事务其实就是打一个标记,告诉数据库后边的执行都是一些临时的更改。只有当遇到提交事务的时候,才会成为一个持久化更改。而回滚事务就是撤销那些临时的操作回到开启事务之前的状态。

相应语法:

事务操作

我们将上述问题用事务去解决

不加事务演示问题

-- 转账操作-- 1. 查询李四账户金额是否大于500-- 2. 李四账户 -500UPDATE account set money = money - 500 where name = '李四';出现异常了... -- 此处不是注释,在整体执行时会出问题,后面的sql则不执行-- 3. 张三账户 +500UPDATE account set money = money + 500 where name = '张三';

整体执行结果肯定会出问题,我们查询账户表中数据,发现李四账户少了500。

添加事务sql如下:

-- 开启事务BEGIN;-- 转账操作-- 1. 查询李四账户金额是否大于500-- 2. 李四账户 -500UPDATE account set money = money - 500 where name = '李四';出现异常了... -- 此处不是注释,在整体执行时会出问题,后面的sql则不执行-- 3. 张三账户 +500UPDATE account set money = money + 500 where name = '张三';-- 提交事务COMMIT;-- 回滚事务ROLLBACK;

上面sql中的执行成功进选择执行提交事务,而出现问题则执行回滚事务的语句。以后我们肯定不可能这样操作,而是在java中进行操作,在java中可以抓取异常,没出现异常提交事务,出现异常回滚事务。

事务四大特征

原子性(Atomicity): 事务是不可分割的最小操作单位,要么同时成功,要么同时失败一致性(Consistency) :事务完成时,必须使所有的数据都保持一致状态隔离性(Isolation) :多个事务之间,操作的可见性持久性(Durability) :事务一旦提交或回滚,它对数据库中的数据的改变就是永久的

隔离性的说明: 隔离性越强,操作越不可见,性能越低 隔离性约弱,操作越可见,性能越高 一般我们不会去改变事务的隔离性。 默认:当我们在MySQL中回滚或者提交之后,别人才能看到我们对应的修改说明:mysql中事务是自动提交的。也就是说我们不添加事务执行sql语句,语句执行完毕会自动的提交事务。可以通过下面语句查询默认提交方式:SELECT @@autocommit;查询到的结果是1 则表示自动提交,结果是0表示手动提交。当然也可以通过下面语句修改提交方式set @@autocommit = 0;

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java 3D入门之基本图形功能 附源码
下一篇:MyBatis初识
相关文章

 发表评论

暂时没有评论,来抢沙发吧~