MySQL事物和事物回滚

什么是事物?

    事物说白了就是一件事从开始发生到结束的整个过程。在MySQL里事务是一组不可被分割执行的SQL语句集合,如果有必要,可以撤销。 这样可以确保数据的一致性。rollback事物回滚,则事物执行失败,保证了数据安全。

事务和事务回滚的应用

  mysql中默认sql语句会自动commit到数据库,在默认情况下MySQL开启的是autocommit模式,也就是隐含的将每条语句当做一个事务处理,每条SQL都会被自动提交。

show variables like "autocommit";

事物应用:开启事物

mysql> start transaction;
mysql>… sql命令

 #此时autocommit被禁用,SQL命令不会对数据库中数据做修改

终止事物

mysql>commit;
或
mysql>rollback;

注意:事务回滚rollback只针对表记录的操作,增、删、改,对创建库、表的操作无效

案例:

建行卡转账农行卡5000

  1. 转账中……
  2. 建行-5000
  3. 农行+5000
  4. commit;转账成功
  5. rollback;回滚,转账失败

过程模拟

表1、CCB
  create table CCB(
name varchar(20),
money int);
  insert into CCB values("zhuanqian",10000);
表2、ICBC
  create table ICBC(
  name varchar(20),
  money int);
  insert into ICBC values("shouqian",10000);
	开始转账
  mysql> start transaction;
  mysql> update CCB set money=5000 where name="zhuanqian";
  mysql> update ICBC set money=...断电了;
  mysql> rollback;
  # select * from CCB 钱并未减少,没有执行命令

事物的性质

    事务的机制通常被概括为“ACID”原则即原子性(A)、稳定性(C)、隔离性(I)和持久性(D)。
  原子性:构成事务的的所有操作必须是一个逻辑单元,要么全部执行,要么全部不执行。
  稳定性:数据库在事务执行前后状态都必须是稳定的。
  隔离性:事务之间不会相互影响。
  持久性:事务执行成功后必须全部写入磁盘。

事物的并发问题

       1、脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据

  2、不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。

  3、幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。

事物的隔离级别

至于事物性质实现原理,以我现水平暂不深入,以后会做深入了解

事务嵌套

当执行一个START TRANSACTION指令时,会隐式的执行一个commit操作,就是开启新事务时,自动提交原来的旧事务
所以没办法开启两个事务,只能通过savepoint来实现嵌套事务

drop table t;
create table t(a int, primary key(a));
begin;
insert into t(a) values(1);
SAVEPOINT s;
insert into t(a) values(2);
ROLLBACK to SAVEPOINT s;
commit;

因为异常,事务回滚,保存点的异常向上传播到主事务,主事务也回滚
表中没有元素

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值