数据库MySQL-事务

定义

事务是一个最小的不可分割的工作单元,事务能够保证一个业务的完整性。
示例;转账有a-钱 b+钱两个动作,两个语句必须都成功才算转正成功。
事务给我们提供了一个返回的机会。

Mysql如何管理事务

  1. MySQL默认是开启事务的(自动开启)
    在这里插入图片描述
    默认事务开启的作用:当我们去执行一个sql语句的时候,效果会立即体现出来。
    自动提交:autocommit=1
    手动提交:commit;
    事务回滚:rollback;

数据准备

在这里插入图片描述

事务控制回滚 rollback

事务回滚:撤销sql语句执行效果
调用rollback无效,当前数据库无法回滚。
方法:设置mysql的自动提交为false(set autocommit=0),关闭了mysql的自动提交。
在这里插入图片描述
再插入一条。
在这里插入图片描述
再调用rollback,生效了。
在这里插入图片描述
原理上其实那条插入值语句并没有生效。系统只是显示插入效果。要想生效则需要commit。此时再rollback无效。
在这里插入图片描述

手动开启事务

先把autocommit还原为1.
begin;/start transaction;帮我们手动开启一个事务
转账: a—b 100;
在这里插入图片描述
因为开启了自动提交commit,此时rollback无效。

再转账,但是在前面加一个begin;

begin;
update user set money = money-100 where name='a';
update user set money = money+100 where name='b';

在这里插入图片描述
rollback生效了。完成后可以用commit提交事务。再之后就不可以回滚了。

事务特征

A 原子性:事务是最小的单位,不能再分割
C 一致性:事务要求,同一事务中的SQL语句,必须保证同时成功或者同时失败
I 隔离型:事务1和事务2之间是具有隔离性的。
D 持久性:事务一旦结束(commit,rollback),就不可以返回

事务开启:

  1. 修改默认提交 set autocommit = 0;
  2. begin;
  3. start transaction;

事务手动提交
commit;
事务手动回滚
rollback;

事务的隔离性:

  1. read uncommitted;读未提交的
  2. read committed;读可以提交的
  3. repeatable read;可以重复读
  4. serializable;串行化

read uncommitted;读未提交的

如果有事务a和事务b,a事务对数据进行操作,在操作的过程中,事务没有被提交,但是b可以看见a操作的结果。这就出现了脏读。
脏读:一个事务读到了另一个事务还没有提交的数据。
实际开发不允许脏读出现。

read committed;

改变隔离级别后,发现就算可以读到对方已经提交的,还是有问题。
出现了不可重复读现象。意思是加入我已经读了数据,然后我没接着操作,暂停了一会,但是其他人用别的事务操作了这个数据,我再接着操作其实不是我刚才读了数据,是更新后的数据。

幻读

repeated-read可以解决前面的问题,但是出现 了幻读。另外一个人提交的这边看不到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值