MySQL基础知识整理 ---- 事务

事务概述

1.事务的概念:如果一个包含多个业务操作的步骤被事务管理,这些操作要么同时成功,要么同时失败。

2.事务应用的举例
模拟银行的转账操作:假设初始账户余额为1000元,均大于500,这时张三给李四转账500元。其应该分为以下几个步骤
(1)查看张三用户余额是否大于500元(这里可省略)。
(2)张三账户减500元。
(3)李四账户加500元。

如果当我们转账过程中遇到如下问题:张三转账完毕后,出现了异常,李四账户操作无法执行。这样便会导致数据的错误。
在这里插入图片描述
那我们又该如何解决上诉问题呢? 需要将上面三个步骤当做一个整体,要么同时执行成功,要么同时执行失败,这就是我们所说的事务。

3.开启事务,回滚事务,提交事务
如何将以上的操作步骤变为一个整体,这便要使用建立事务的sql语句。

start transaction 开启事务
rollback 回滚事务
commit 提交事务

/*
建立一张账户表,存储张三和李四账户的余额
*/

create table account(
      id int primary key auto_increment,
      name varchar(10),
      money int   -- 账户余额
);

/*
将转账操作用事务管理
*/
start transaction;   -- 开启事务
update account set money = money-500 where name = '张三';  -- 张三账户减500元
update account set monry = money+500 where name = '李四';  -- 李四账户加500元

rollback;  -- 如果发生错误回滚事务
commit; -- 如果执行正确就提交事务

需要注意的是,当我开启一个事务后,只有将其提交,数据才会持久性改变,否则只是临时修改。其次在MySQL当中执行增加,删除,改变语句均被当做一个事务,且MySQL事务提交的方式,默认为自动提交。

/*
查看和修改MySQL数据库提交的语法
*/

select @@autocommit;  -- 查看事务的提交方式,1代表自动提交,0代表手动提交
set @@autocommit = 0;  -- 设置事务的提交方式位手动提交

事务的四大特征

1.原子性:事务是不可分割的,要么同时执行成功,要么同时执行失败。
2.持久性:如果事务一旦被提交或回滚后,数据库会持久化的保存数据。
3.隔离性:多个事务之间相互独立,事务与事务之间隔离
4.一致性:几个并行执行的事务,其执行结果必须与按某一顺序 串行执行的结果相一致。

事务的隔离级别

1.为什么要有事务隔离级别?如果多个事务 操作同一批数据,则会引发一些问题,设置不同的隔离级别就可以解决这些问题。
下面两张表分别展示了问题和隔离级别的类型。

问题类型描述
脏读一个事务读取到另一个事务没有提交的数据
不可重复读(虚读)事务A首先读取了一条数据,然后执行逻辑的时候,事务B将这条数据改变了,然后事务A再次读取的时候,发现数据不匹配了,就是所谓的不可重复读了。主要针对update和delete
幻读事务A首先根据条件索引得到N条数据,然后事务B改变了这N条数据之外的M条或者增添了M条符合事务A搜索条件的数据,导致事务A再次搜索发现有N+M条数据了,就产生了幻读。主要针对insert
隔离级别该级别可能产生的问题
read uncommitted(读未提交)脏读,不可重复读,幻读
read committed(读已提交)不可重复读,幻读
repeatable read(可重复读)幻读
serializable(串行化)可以解决所有问题

需要注意的是以上所描述的隔离级别,从上到下安全性越来越高,但是效率却越来越低。其次,在MySQL数据库当中,其默认的隔离级别为 repeatable read(可重复读)。

/*
查询和修改隔离级别的sql语法
*/

select @@tx_isolation;  -  查询隔离级别

set global transaction isolation level serializable;  -- 设置隔离级别为串行化

以上即是mysql当中关于事务部分的知识点的简单整理。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值