二十五、数据库事务

事务的定义: 事务(transaction)是一系列要发生的连续的操作的集合
事务安全的定义: 一种连续操作同时满足(实现)的一种机制
事务安全的意义的定义: 事务安全的意义是保证数据操作的完整性
事务操作的分类: 事务操作分为两种,为自动事务(默认的)和手动事务,下面会详细介绍。

1、手动操作(事务操作)

手动事务操作流程
  1. 开启事务:告诉系统以下所有的操作(写)不要直接写入到数据表,先存放到事务日志。开启事务的指令:start transaction;

  2. 进行事务操作(本质上就是一些SQL语句,做一些操作)

    例如:
    //a 李四账户减少
    update acount set money = money-1000 where id = 2;
    //b 张三账户增加
    update account set money=money+1000 where id=1;

  3. 执行完所有操作后,最后关闭事务。关闭事务的实质就是选择性的将日志文件中操作的结果保存到数据表(同步),或者说直接清空事务日志(原来操作全部清空);关闭事务有两种情况, 具体的如下:

    1. 提交事务:同步数据库(操作成功) commit
    2. 回滚事务:直接清空日志表(操作失败) rollback

注: 一定要注意存储引擎,免费的只有innodb才支持事务安全

2、事务的原理

事务开启之后,所有的操作都会临时保存到事务日志当中,而事务日志只有在得
到commit命令后,才会同步到数据表,其他任何情况都会自动清空。下面用一个图来解释事务的原理:
在这里插入图片描述

3、事务的回滚点

回滚点的定义: 在某个成功的操作完成之后,后续的操作有可能成功有可能失败,但是不管成功还是失败,前面的操作已经成功,可以在当前成功的位置设置一个点,如果后续操作失败,就返回到该位置,而不是返回所有操作,这个点称之为回滚点。
设置回滚点的基本语法: savepoint 回滚点名字;
回到回滚点语法: rollback to 回滚点名字;
实例: 给张三账户加钱,银行扣税

//开启事务
start transaction;
//事务处理:张三加钱
update account set money = money+1000 where id=1;
//设置回滚点
savepoint sp1;
// 事务处理:银行扣税
update account set money = money-1000*0.05 where id=2; //错误
// 回滚到回滚点
rollback to sp1;
// 提交事务
commit;

4、自动操作(事务操作)

在mysql中,默认的都是自动事务处理,也就是说用户操作完成后会立即同步到
数据表中;
自动事务: 系统通过autocommit变量控制;
查看此变量:show variables like “autocommit”;
关闭事务自动提交的命令: set autocommit = 0;//会话级
注意: 自动提交事务被关闭后就需要手动的提交事务了;再者,通常都会使用自动事务。

5、事务的特性

事务有四大特性: ACID特性
其中,分别表示的意思如下:

  1. A(Atomicity):原子性
  2. C(Consistency):一致性
  3. I(Isolation):隔离性
  4. D(Durability):持久性

四大特性之间的关系: AID是数据库的特性,C是应用层特性,AID是为C服务的,目的就是要保证逻辑能正确的执行。
锁机制: innodb默认是行锁,但是如果在事务操作的过程中,没有使用到索引,那么系统会自动全表检索数据,自动升级为表锁;

  1. 行锁:只有当前行被锁住,别的用户不能操作
  2. 表锁:整张表被锁住,别的用户都不能操作

附: 大部分与钱相关的都会用到事务处理。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值