MySQL基础笔记(9)事务

一.简介

        所谓事务,是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或者撤销操作请求,即,这些操作要么同时成功,或者同时失败——OS中有原语不可分割的概念,虽然没有必然联系,但此处可以类比~ 

回滚:临时修改的数据因为发生异常必须修改回去

注意:默认MySQL的数据库是自动提交的,执行一条sql语句,MySQL会立即隐式的提交事务~

二.操作

以转账的场景为例:

select * from account where name='张三';
-- 查询张三余额
update account set money =money-1000 where name ='张三';
--张三余额少了1000
update account set money = money+1000 where name='李四';
--李四余额增加1000

如若发生如下异常:

select * from account where name='张三';
-- 查询张三余额
update account set money =money-1000 where name ='张三';
--张三余额少了1000

强行语法错误报错!

update account set money = money+1000 where name='李四';
--李四余额增加1000

则会导致张三减1000而李四不加1000。

变更事务的提交方式一:

  • 查看并设置事务提交方式为0。
select @@autocommit;
set @@autocommit=0;
  • 提交事务。
commit;
  • 回滚事务。
Rollback;

将上述代码修改为如下:

select @@autocommit;
set @@autocommit=0;

select * from account where name='张三';
-- 查询张三余额
update account set money =money-1000 where name ='张三';
--张三余额少了1000

强行语法错误报错!

update account set money = money+1000 where name='李四';
--李四余额增加1000
commit;
Rollback;

则,当发生异常时,数据也不会受到影响~ 

方法二:不改变事务提交方式

start transaction;

select * from account where name='张三';
-- 查询张三余额
update account set money =money-1000 where name ='张三';
--张三余额少了1000

强行语法错误报错!

update account set money = money+1000 where name='李四';
--李四余额增加1000

commit;
Rollback;

三.四大特性ACID

四.并发事务问题

  • 脏读: 通俗地说就是某一个事务中更改了表中的数据,但还没有提交,此时另外一个事务却已经有了查询该表中数据的操作~

  • 不可重复读:因为别的事务的干预,导致两次查询结果不一致

  • 幻读:由于可重复读读取的永远都是事务刚开始时的数据,因此事务A中两次想要查询结果都为空

五.事务隔离级别

(翻译过来分别为:读未提交,读已提交,可重复读,串行化)~ 

选择时,要权衡数据的安全性和并发的性能~

select @@transaction_isolation;
--查询当前事务隔离级别

set [session|global] transaction isolation level 
{read uncommitted|read committed|repeatable read|serializable};
--改变事务隔离级别
  • 单个竖杠表示可选一
  • session表示只作用对话窗,global表示作用于全局~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/335962.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯、编程考级、NOC、全国青少年信息素养大赛—scratch列表考点

1、小小情报员(202309scratch四级24题) 1.准备工作 (1)选择背景 Colorful City; (2)保留角色小猫,选择角色Ballerina。 2.功能实现 (1)角色小猫初始位置…

灵活扩展:深入理解MyBatis插件机制

第1章:MyBatis插件的重要性 大家好,我是小黑,咱们今天要聊的是MyBatis插件,MyBatis,大家都不陌生,它是一个ORM(对象关系映射)框架,让咱们在操作数据库时能更加优雅。但今…

vulnhub通关-1 DC-1(含靶场资源)

一、环境搭建 1.环境描述 描述 描述: DC-1 is a purposely built vulnerable lab for the purpose of gaining experience in the world of penetration testing. Dc-1是一个专门构建的易受攻击的实验室,目的是获得渗透测试领域的经验。 It was design…

怎么移除WordPress后台工具栏的查看站点子菜单?如何改为一级菜单?

默认情况下,我们在WordPress后台想要访问前端网站,需要将鼠标移动到左上角的站点名称,然后点击下拉菜单中的“查看站点”才行,而且还不是新窗口打开。那么有没有办法将这个“查看站点”子菜单变成一级菜单并显示在顶部管理工具栏中…

Docker进阶篇-安装MySQL主从复制

一、MySQL主服务器 1、新建主服务器容器实例3307 docker run -p 3307:3306 \--name mysql-master \--privilegedtrue \-v /mydata/mysql-master/log:/var/log/mysql \-v /mydata/mysql-master/data:/var/lib/mysql \-v /mydata/mysql-master/conf:/etc/mysql \-e MYSQL_ROOT_…

超声波清洗机清洗眼镜有用吗?值得入手洗眼镜超声波清洗机推荐

眼镜党朋友长时间佩戴眼镜避免不了受到灰尘、污垢和细菌的侵扰,不清洗的话我们的视线就会被有所阻碍,为了保证我们眼镜的干净同时也是为了注意个人卫生,建议我们定期清洗一下眼镜,给眼镜洗个澡顺便消消毒,从一开始用水…

多分支机构大型企业如何高效运维管理?向日葵x金地商置案例分享

对于下设多个分支机构的,跨地区经营的大型企业来说,如何高效安全的实施IT运维是一个重要的课题;同时,分支机构之间如何实现高效的异地协同办公,并且在这一需求的基础上进一步强化管理,也是企业管理者需要认…

Ubuntu 22.04 安装MySql

MySQL是非常常用的关系型数据库,无论是大厂还是小厂,都有它的身影。最大的优点是免费,安装起来也比较简单。 MySQL的架构 画了个简图,描述了下MySQL的架构。 其中的比较有趣的点在于连接池和存储引擎。连接池缓存了数据库和客户端的TCP连接,以减少建立连接的开销。存储引…

第35集《佛法修学概要》

己四 、 精进度 分三:庚一、 精进自性。庚 二、趣入修习精进方便。 庚三、修习精进差别内容 请大家打开讲义第九十四页,我们看己四,精进度。 当我们从人天乘一个好人的阶段提升到一种菩萨道的修学,我们就要注意两个重点了。在我…

实验五 PLSQL编程

🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的很重要&…

Cmake 之Android库编译

一 检测库和执行程序能否在Android上用 1.1 我们知道Cmake不止能编译Linux库程序,也能编译出其它系统的库,如windows,ios和android等,那么上一篇生成的Linux的库程序能否直接用于Android上呢,下面先来做个测试。 1.2…

实验算法设计

文章目录 Unettransformer整体网络架构 Unet 可以用双线性差值替换,效果差不多,参数更少。 from typing import Dict import torch import torch.nn as nn import torch.nn.functional as F class DoubleConv(nn.Sequential):def __init__(self, in_cha…

interpret,一个超酷的 Python 库

更多资料获取 📚 个人网站:ipengtao.com 大家好,今天为大家分享一个超酷的 Python 库 - interpret。 Github地址:https://github.com/interpretml/interpret Python Interpret 是一个强大的开源工具,它为 Python 开发…

Crow:设置网站的index.html

对于一个网展来说,index.html是其第一个页面,也是根页面,如何通过Crow来加载index.html呢。 Crow:静态资源使用举例-CSDN博客 讲述了静态资源的使用,也就是通常存饭html,css,jpg文件的地方 当然index.html也会放在这个目录,但通常是放在static的根目录,其他资源会根据…

2.1.4-相关性分析

跳转到根目录:知行合一:投资篇 已完成: 1、投资&技术   1.1.1 投资-编程基础-numpy   1.1.2 投资-编程基础-pandas   1.2 金融数据处理   1.3 金融数据可视化 2、投资方法论   2.1.1 预期年化收益率   2.1.2 一个关于yaxb的…

vuex-跨模块访问

1. 场景 案例:跨模块访问和退出登录 假设我们有一个Vuex store,其中包含user模块和cart模块。当用户点击退出登录按钮时,我们需要调用user模块中的方法来清除用户信息,同时还需要清除cart模块中的购物车数据。 2. 实现-跨模块访…

air001研究笔记.基于arduino快速开发简单项目

一、air001芯片简介 air001是厂商合宙推出的一款tssop封装的mcu芯片。支持swd与串口烧录,多面向简单的功能简单类别的电子产品,因为官方文档齐全上手简易,所以也特别适合非专业爱好者乃至于幼儿编程。芯片内置资源:AIR001芯片数据…

国产AI新篇章:书生·浦语2.0带来200K超长上下文解决方案

总览:大模型技术的快速演进 自2023年7月6日“书生浦语”(InternLM)在世界人工智能大会上正式开源以来,其在社区和业界的影响力日益扩大。在过去半年中,大模型技术体系经历了快速的演进,特别是100K级别的长…

用LED数码显示器循环显示数字0~9

#include<reg51.h> // 包含51单片机寄存器定义的头文件 /************************************************** 函数功能&#xff1a;延时函数&#xff0c;延时一段时间 ***************************************************/ void delay(void) { unsigned …

Docker项目部署()

1.创建文件夹tools mkdir tools 配置阿里云 Docker Yum 源 : yum install - y yum - utils device - mapper - persistent - data lvm2 yum - config - manager -- add - repo http://mirrors.aliyun.com/docker- ce/linux/centos/docker - ce.repo 更新 yum 缓存 yum makec…