MySQL事务-学习笔记

MySQL事务

事务的意义

案例:银行转账过程

A向B转账500,A原来有1000,B有500。

分析:

SQL处理过程:

A 减少 500

B 增加 500

以上两点必须同时生效,才算合理。

核心:要么都成功,要么都失败

事务(Transaction):一个最小的不可再分的工作单元;通常一个事务对应一个完整的业务(例如银行账户转账业务,该业务就是一个最小的工作单元)

事务管理(ACID)

原子性(Atomicity)

原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。

以上述例子为例:

转账成功:A 转出500,B转入500是同时发生的。

转账失败:A 转出500失败,B不会转入500。

转账要么都成功,要么都失败,不能只发生一个动作,比如A少了500,但B没加。

一致性(Consistency)

事务前后数据的完整性必须保持一致。

无论怎么转总价值 1500,不会少。

持久性(Durability)

持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响

事务没有提交,则恢复到原状

事务如果提交,则不可逆

隔离性(Isolation)

事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。

A给B转账,C给B转账。两个是独立的,不会相互影响。

常见问题

脏读

指一个事务读取了另一个事务未提交的数据。

举例:

A :1000 B:500 C:1000

首先A 转账给B 500,记为事务1,此时A:500 B:1000,但事务没结束,结果还未提交。

这时C 也转账给B 500,该事务中B的初始值是500,C是1000,转账后 B:1000 ,C:500。

事务1提交结果,A:500,B:1000。

事务2提交结果,B:1000,C:500。

最后结果:A:500 B:1000 C:500,B 少了500!

错误原因是事务2读取的B的余额不准确。

不可重复读

在一个事务内读取表中的某一行数据,多次读取结果不同。(这个不一定是错误,只是某些场合不对)

比如报表功能,包含查询、生成报表,查询的时候,A :1000 B:500。在生成报表前,提交A完成转账500给B的事务,最终生成的报表中,A:500,B:1000

虚读(幻读)

和上面类似,是指在一个事务内读取到了别的事务插入的数据,导致前后读取不一致。

(一般是行影响,多了一行。)

执行事务

MySQL是默认开启事务自动提交的,需要关闭。语句如下:

SET autocommit = 0 -- 关闭

SET autocommit = 1 -- 开启(默认的)

手动处理事务:

关闭事务自动提交 SET autocommit = 0

开启事务(标记一个事务的开始,之后的语句都在同一个事务内) Start transaction

写SQL语句……

执行操作

提交(成功,持久化到数据库) commit

回滚(失败,回到原来的样子) rollback

事务结束

打开事务自动提交

其他(了解即可)

事务语句较多时,可以设置保存点 savepoint

回滚到保存点 rollback to savepoint

释放保存点 release savepoint

案例:实现一个转账事务,A向B转账500

-- 创建数据库 Bank

CREATE DATABASE `Bank` CHARACTER SET utf8 COLLATE utf8_general_ci;

-- 创建表

CREATE TABLE `account`(

`id` INT(4) AUTO_INCREMENT NOT NULL,

`name` VARCHAR(20) NOT NULL,

`money` DECIMAL(9,2) NOT NULL,

PRIMARY KEY(`id`)

)ENGINE INNODB DEFAULT CHARSET=utf8;

-- 插入A和B的账户数据

INSERT INTO `account`(`name`,`money`) VALUES ('A','1000.00'),('B','500.00');

-- 转账事务处理

-- 关闭事务自动提交

SET autocommit=0;

-- 开启事务

START TRANSACTION;

-- 写SQL语句

-- A - 500

UPDATE `account` SET money=money-500 WHERE `name`='A';

-- B + 500

UPDATE `account` SET money= money+500 WHERE `name`='B';

-- 提交事务

COMMIT;

-- 重新打开事务自动提交

SET autocommit=1;

以上为事务相关的基础内容学习记录及案例练习。

MySQL事务-学习笔记 相关文章

Mysql Innodb中的int类型字段在文件中是怎么存储的

今天记录一个比较有意思的东西,看一下int类型的字段在.ibd文件中是怎么存的。 int类型是一种有符号类型,四个字节,所以在表示数据的时候只有后面的31位是有效位,最高值为2^31-1。那么如果字段值是1的话,.ibd文件中是不是存储的内容就是0x00000001了呢下

【大众点评】—— 前端架构设计

前言 :正在学习react大众点评项目课程,学习react、redux、react-router构建项目。 一、前端架构是什么 前端架构的特殊性 前端不是一个独立的子系统,又横跨整个系统 分散性:前端工程化 页面的抽象、解耦、组合 可控:脚手架、开发规范等 高效:框架、组件

重做系统后,mysql不重新安装,能正常使用的方法

昨天发现mysql 在win10重装系统后用不了了。继而向查一下mysql能像其他软件一样不重装就能使用吗,结果发现查询不尽人意 这里就稍微总结一下,mysql在不重装的情况下,设置过程中出现的问题。 1.设置系统环境变量,右键此电脑属性高级系统设置环境变量path,

Bootstrap学习笔记

本博文根据菜鸟教程以及BootStrao官网的文档学习整理完成 Bootstrap: 1. 概念: 一个前端开发的框架,Bootstrap,来自 Twitter,是目前很受欢迎的前端框架。Bootstrap 是基于 HTML、CSS、JavaScript 的,它简洁灵活,使得 Web 开发更加快捷。* 框架:一个半

MIT 6.S081 聊聊xv6的文件系统(中)日志层与事务

前言 我本想把上篇中没讲完的剩余层全部在本篇中讲完,但没想到越写越多。 日志层 的代码不多,其思想和解决问题的手段也不算难以理解,但其背后涉及的原理和思想还是非常值得回味的,因此我打算用一整篇完整的blog来讲解日志层,并对其作出一点扩展。 本篇

SpringBoot学习笔记(1)——第一个SpringBoot程序

一、创建方式 可以在官网https://start.spring.io直接下载后,导入idea开发 直接使用idea创建SpringBoot项目 二、idea快速创建 1. 如下图所示创建项目: 2. 程序的目录结构如下: 3. 下载好所有的依赖后,启动项目,浏览器访问 localhost:8080:出现如下界面

Java 语法学习2

Java基础语法二 类型转换 public class demo03 { public static void main(String[] args) { int i=128; byte a=(byte)i;//强制转换:(类型)变量名 char b="a"; int c=b+1; System.out.println(i); //结果为128 System.out.println(a); //结果为-128 //内存

Mysql训练:第二高的薪水(IFNULL,OFFSET,LIMIT)

编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary)。 +----+--------+| Id | Salary |+----+--------+| 1 | 100 || 2 | 200 || 3 | 300 |+----+--------+ 例如上述 Employee 表,SQL查询应该返回 200 作为第二高的薪水。如果不存在第二高的薪水

Python基础教程(一)、学习Python的未来

目录 说在前面的话 Python 基础 概述 查看 Python 版本 第一个Python程序 Python 能做什么 web开发 python爬虫 人工智能 数据科学 python的其他应用 视频处理 Python 就业方向 Python 对应职位 Python 相关职位起步薪酬 说在前面的话 最近几年,互联网行业越

常用的MySQL命令

常用MySQL命令 Mysql常用命令,包括数据定义语句、数据操纵语句及数据控制语句,基于Mysql5.7。 数据定义语句(DDL) 数据库操作 登录数据库: mysql -uroot -proot 创建数据库: create database test 查看所有数据库: show databases 选择数据库并使用: us

ci mysql 事务_MySQL事务-学习笔记相关推荐

  1. MySQL实战45讲学习笔记

    文章目录 MySQL实战45讲-学习笔记 01 基础架构:一条SQL查询语句是如何执行的? mysql逻辑架构 连接器 查询缓存 分析器 优化器 执行器 02 日志系统:一条SQL更新语句如何执行 r ...

  2. 从零开始带你成为MySQL实战优化高手学习笔记(一)

    重复是有必要的. 很多新入职的小朋友可能和现在的我一样,对数据库的了解仅仅停留在建库建表增删改查这些操作,日常工作也都是用封装好的代码,别说底层原理了,数据库和系统之间是如何工作都不是很懂. 长此以往 ...

  3. 《姜承尧的MySQL实战宝典》学习笔记

    <姜承尧的MySQL实战宝典>学习笔记 1 表结构设计 1.1 数字类型 1.1.1 整形类型 1.1.2 浮点类型和高精度型 1.1.3 实战--整型类型与自增设计 1.1.4 实战-- ...

  4. mysql 事b务 查询_MySQL进阶学习笔记二(包括连接查询、子查询、联合查询、事务、存储过程)...

    1.高级查询 (1)了解笛卡尔积:笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尔积(Cartesian product),又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序 ...

  5. 《SQL高级应用和数据仓库基础(MySQL版)》学习笔记 ·006【事务】

    文章目录 一.事务 1.事务介绍 2.事务组成 3.事务结束 4.MySQL事务处理 5.保存点与回档 6.事务隔离级别 7.脏读.不可重复读.幻读 一.事务 1.事务介绍 事务,也称工作单元,是由一 ...

  6. mysql事务所_MySQL事务,这篇文章就够了

    0 什么是事务 事务(Transaction) 是并发控制的基本单位.所谓的事务,它是一个操作序列,这些操作要么都 执行,要么都不执行,它是一个不可分割的工作单位.事务是数据库维护数据一致性的单位,在 ...

  7. mysql function 事务_MySQL 事务

    MySQL 事务 前言 在我们平常的开发过程中,我们经常对于一个业务流程需要执行一组SQL,但是为了确保这一组SQL要么全部执行成功,要么全部不执行,我们需要用到MySQL的事务,而在使用事务的时候我 ...

  8. mysql测试事务_MySQL事务测试

    mysql事务测试 1.打开mysql的命令行,将自动提交事务给关闭 --查看是否是自动提交 1表示开启,0表示关闭 select @@autocommit; --设置关闭 set autocommi ...

  9. mysql 事务_MySQL事务

    MySQL中,事务其实是一个最小的,不可分割的工作单元,事务能够保证一个业务的完整性. 比如:我们的银行转账:a给b转账100 a---->-100 b---->+100 update u ...

最新文章

  1. 联想拯救者Y7000P 2021H deepin v20.2.4设置双屏显示:切记要用集显,NAVIDA独显不生效
  2. Python闭包与装饰器
  3. Android开发之拍照后图片旋转的问题
  4. android区块链 钱包_区块链钱包Cashbox 开发工程师聊一聊开源
  5. DEDE无简略标题时显示完整标题
  6. php5.4.41 绿色_编译安装PHP5.4.41
  7. HNUSTOJ-1437 无题
  8. 基础编程题目集 6-6 求单链表结点的阶乘和 (15 分)
  9. textbox控件输入内容后按下Enter键后执行button1的click方法
  10. TensorFlow使用--MNIST分类学习(BP神经网络)
  11. linux添加终端快捷键,linux 终端快捷键
  12. DevOps - (1)Terraform+阿里云实现云资源的CI/CD
  13. 教你App如何上架应用宝----腾讯开放开发平台
  14. 简单获取unix时间戳
  15. 2015 岁末 祝福 感恩
  16. redhat7安装yum
  17. 计算机毕业设计SpringBoot选题推荐 学生档案管理系统 高校档案管理系统
  18. 数据库sql嵌套查询
  19. Android cpu架构类型升级方案调研
  20. 共享文档服务器iops,云服务器iops

热门文章

  1. golang垃圾回收概述
  2. Matplotlib基础绘图功能 — 以折线图为例
  3. RIPv2相对于RIPv1来说主要有3方面的改进。下面的选项中,RIPv2的特点不包括【两个题】
  4. ACMNO.26 C语言-字符统计2 编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其它字符的个数,在主函数中输入字符串以及输出上述结果。 只要结果,别输出什么提示信息。
  5. ACMNO.10打印出所有水仙花数,所谓水仙花数是指一个三位数,其各位数字立方和等于该本身。 例如:153是一个水仙花数,因为153=1^3+5^3+3^3。 Output: 153 ???
  6. Python基础学习!容器:列表,元组,字典与集合!(1)
  7. 收藏 | 机器学习最全知识点汇总(万字长文)
  8. 机器学习算法常用指标总结
  9. rabbitmq学习——安装测试
  10. 点击除元素以外的任意地方隐藏元素js