初学事务处理的笔记

对于自学的我来说,之前接触到数据库的知识就是增删改查,一涉及什么事务就很蒙,不知道什么意思,今天找了一本入门Mysql看了一下,写一点收获笔记

我们都知道MySQL支持好几种基本的数据库引擎,什么MyISAM,InnoDB,虽然不知道什么意思,但或多或少都看过这个字眼。先说一下区别,MyISAM不支持事务处理,InnoDB支持事务处理,根据是否需要事务处理选择对应的引擎。

什么是事务和事务处理

  • 事务(transaction):是一组SQL语句
  • 事务处理:说它是一种机制,这个机制就是用来保证SQl的操作是成批进行的(也就是事务处理块中的sql),保证在一个块中的sql要么完全执行,要么完全不执行。

我感觉就像是java里面的synchronize同步锁一样,让一组sql语句具有原子性

为什么要有事务处理

假如A给B转10块钱,有两条update语句,第一条update让A少10块钱,第二条让B多十块钱。 不巧的是刚执行完第一条语句,突然数据库出现故障了,让10块钱消失了。这就出现大问题了。

写事务处理

介绍一下这几个关于事务处理的词
  • 事务(transaction):是一组SQL语句
  • 回退(rollback):撤销指定sql语句的过程
  • 提交(commit):将未存储的sql语句结果写入数据库表
  • 保留点(savepoint):在事务处理中设置一个标记(placeholder占位符),你可以对它发布回退(与回退整个事务处理不一样)
用例测试

开启一个事务处理

  1. 开启一个事务处理
  2. 删除user表中的所有行(user表中是有数据的)
  3. 再查看这个表的状态
  4. 执行撤销操作
  5. 再查看状态

第一条语句执行结果如下:因为delete了所以数据都没了
在这里插入图片描述
第二条语句执行结果如下: 数据又都回来了!!!!
在这里插入图片描述

总结ROLLBACK:可以回退的语句 ,有insert,update,delete,不能回退select(因为没有啥意义啊,前3条语句都是可以对表产生影响的,select就是看看数据)

commit的用法
autocommit

只用在InnoDb引擎中 :因为InnoDB支持事务处理

  • 在InnoDB中:
    update tablenam set id = 999 where id = 1;(缓存生效)
    commit;(真实生效)
  • MyISAM:
    update tablenam set id = 999 where id = 1;(缓存生效)

autocommit这个参数默认是on,每条sql‘语句自动的执行提交操作。
关闭autocommit后,在每条sql语句都得有commit操作

然而不管autocommit参数为0还是1,只要start transaction;autocommit就失效(也就是说这个参数是对没开启事务的sql语句有效),必须加上commit

执行完rollback或者commit事务就会结束

保留点(savepoint)

配合rollback使用,相当于一个标记,使用rollback可以撤销到savepoint的部分

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值