当前位置: 首页 > news >正文

MySQL-事务

一.事务的概念   

        事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败。

        在不同的环境中,都可以有事务。对应在数据库中,就是数据库事务。

二.为什么需要事务

        准备测试表:

drop table if exists accout;
create table accout(
 id int primary key auto_increment,
 name varchar(20) comment '账户名称',
 money decimal(11,2) comment '金额'
);
insert into accout(name, money) values
('阿里巴巴', 5000),
('四十大盗', 1000);

        比如说,四十大盗把从阿里巴巴的账户上偷盗了2000

-- 阿里巴巴账户减少2000
update accout set money=money-2000 where name = '阿里巴巴';
-- 四十大盗账户增加2000
update accout set money=money+2000 where name = '四十大盗';

      假如在执行以上第一句SQL时,出现网络错误,或是数据库挂掉了,阿里巴巴的账户会减少2000,但是四十大盗的账户上就没有了增加的金额。解决方案:使用事务来控制,保证以上两句SQL要么全部执行成功,要么全部执行失败。

      在操作数据库中的数据时引入事务,来保证这一系列操作(将一些列SQL语句打包成一个整体)的原子性(表示不可拆分的情况)。

      这些操作要么都执行要么都不执行,此时这个都不执行是一个伪概念,并不是真的一个都不执行,而是先执行如果碰到错误的操作,然后触发回滚操作,然后将数据库恢复。

       回滚操作,就是在事务执行的过程中,记录事务中的关键操作,用来作为事务执行失败时回滚的依据。这些关键操作是保存在文件中的,即使在事务执行失败时主机掉电,也是不影响的(因为在失败之前回滚所需要的文件就已经生成了),当主机恢复会优先执行回滚操作,保持数据库中数据的正确性。

三.事务的特点

        1.原子性 

                通过回滚的方式实现的,保证了一系列操作都可以正确的执行,如果失败了也可以恢复如初

        2.一致性

                事务在执行前后的数据都要保持正确

        3.永久性

                事务的操作是永久的生效的

        4.隔离性 (在数据库并发的处理多个事务时需要考虑的特性)

                数据库为什么需要并发的处理事务:

                        因为数据库是一个客户端服务器结构的软件,所以在同一时间就有可能接收到多个事务处理,如果此时在保持串行,那么数据库的效率会大打折扣,所以此时引入多台主机,来并发的执行事务,就可以提高数据库服务器的执行效率。

                数据库并发执行多个事务的时候,涉及到的问题:

四.事务的操作

        1.开启事务

                start transaction;

        2.事务结束

                commit;

        3.rollback

                主动出发事务的回滚(一般是在其他语言中,搭配条件判断来实现的)。

相关文章:

  • 【深度强化学习】置信域策略优化(TRPO)
  • Python的那些事第二十五篇:高效Web开发与扩展应用实践FastAPI
  • 【操作系统】操作系统概述
  • vue3 子组件属性响应性丢失分析总结(四)
  • TMS320F28335二次bootloader在线IAP升级
  • 在windows10上,部署DeepSeek模型在本地电脑
  • 【钱包】【WEB3】【Flutter】一组助记词如何推导多个账号钱包
  • Unity 淡入淡出
  • agent和android怎么结合:健康助手,旅游助手,学习助手
  • 【插入排序】Insert_Sort
  • 电机控制::软件架构::微型软件架构
  • 基于开源Odoo、SKF Phoenix API与IMAX-8数采网关的圆织机设备智慧运维实施方案 ——以某纺织集团圆织机设备管理场景为例
  • I²C简介
  • OSPF协议五种网络类型中DR和BDR选举说明
  • Linux内核实时机制4 - 实时改造优化 - PREEMPT_RT方案
  • Linux学习笔记之深入理解进程调度
  • 3、cadence从零开始让一个VCO起振——如何调频
  • 复现log4j2的jndi注入成功反弹shell
  • SQL进阶技巧:如何统计用户跨端消费行为?
  • (leetcode 1749 前缀和)1749. 任意子数组和的绝对值的最大值
  • 中国新闻发言人论坛在京举行,郭嘉昆:让中国声音抢占第一落点
  • 俄乌直接谈判结束,乌称“毫无成果”
  • 陕西省市监局通报5批次不合格食品,涉添加剂超标、微生物污染等问题
  • 魔都眼|锦江乐园摩天轮“换代”开拆,新摩天轮暂定118米
  • 上海市国防动员办公室副主任吴斌接受审查调查
  • MSCI中国指数5月调整:新增5只A股、1只港股