MySQL的事务

1、事务的必要性
事务是一组不可被分割执行的SQL语句的集合,如果有必要,可以撤销。如银行转账,用户A给用户B转账主要分为两部分:第一,账户A的账户金额减去8000;第二步,账户B的账户金额加上8000。这两步要么全成功,要么全不成功,否则会导致数据不一致。这就需要用到事务来保证,如果是不同银行的转账,还会用到分布式事务。

2、事务的基本操作
以银行转账为例
1)创建测试表
在这里插入图片描述
2)开始一个事务——start transaction;
在这里插入图片描述
3)创建一个保存点——savepoint 保存点名称
在这里插入图片描述
4)回到保存点 ——rollback to 保存点名
在这里插入图片描述
注意事项:
1)可以选择回退到哪个保存点,如果一个事务被提交了(commit),则不可以回滚(rollback)。
在这里插入图片描述
2)如果没有设置保存点也可以回滚,但是只能回滚到事务的开始。
3)InnoDB支持事务,MyISAM不支持事务。

3、事务的特性
事务的特性通常被概况为“ACID”,A:原子性;C:稳定性;I:隔离性;D:持久性。
(1)原子性(Atomicity):事务是一个不可分割的工作单元,事务中的操作要么全部执行,要么全部不执行。
(2)一致性(Consistency):数据库在事务执行前后状态保持一致。
(3)隔离性(Isolation):多个用户并发访问数据库时,数据库为每一个用户开启的事务不会被其他事务干扰。
(4)持久性(Durability):事务一旦被提交,它对数据库中的数据修改就是永久性的。

4、事务的隔离级别
(1)不考虑隔离性可能会引发的问题
1)脏读
指一个事务A访问一个数据D,并且对数据进行修改变为M,但是还没有提交到数据库中,这时事务B访问了这个数据M。
【例1】
A、Mary的原工资为8000,财务人员将Mary的工资改为12000,但是未提交事务;
B、Mary读取自己的工资,发现自己的工资变为了12000;
C、然而,财务发现操作有误,回滚了事务,Mary的工资又变为了8000。
像这样,Mary记取的工资数12000是一个脏数据。
2)不可重复读
指一个事务A访问一个数据D,这时事务B对数据D修改,变为M,当事务A再次访问,发现前后两次读取的数据不一样,因此称为不可重复读。
【例2】
A、在事务中1中,Mary读取了自己的工资为8000,操作并没有完成;
B、在事务2中,财务人员修改了Mary的工资为18000,并提交了事务;
C、在事务1中,Mary再次读取自己的工资时,工资变为了18000。
解决的方法:如果只有在修改事务完全提交之后才可以读取数据,则可以避免该问题。
3)幻读
指一个事务A访问表Y,这时事务B在表Y中插入或者删除数据,当事务A再次访问表Y时,发现突然多了数据或者少了数据,这个情况就就叫做幻读。
【例3】目前工资为8000的员工有10人
A、事务1读取所有工资为8000的员工信息;
B、这时事务2向employee表插入了一条员工记录,工资也为8000;
C、当事务1再次读取所有工资为8000的员工,共读取到11条记录。
解决的方法:如果在操作事务完成数据处理之前,任何其他事务都不可以添加新数据,则可避免该问题。
4)注意:不可重复读的重点是修改,同样的条件,你读取过的数据再次读取出来发现值不一样了;幻读的重点是新增或者删除,同样的条件,第一次和第二次读出来的记录数不一样。
(2)事务的隔离级别操作
在这里插入图片描述
1)设置事务的隔离级别
A、语法:set session transaction isolation level 隔离级别;
在这里插入图片描述
B、查看当前的隔离级别:
在这里插入图片描述
说明:MySQL默认的隔离级别是不可重复读,一般情况下不要修改。
【例4】可串行化案例
当设置事务的隔离级别是可串行化,客户端在执行select过程中,DBMS会对库加锁。如果这时客户端B执行插入,只要事务A还没释放锁(提交commit)就不能插入进去,而是将事务B的update语句放入等待队列中,直到释放了锁或者超时。如下图所示:
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值