首页 > 数据库 >MySQL事务

MySQL事务

时间:2023-03-06 11:23:14浏览次数:66  
标签:autocommit 事务 set -- money 提交 MySQL

1.事务

1.1、什么是事务

要么都成功,要么都失败

——————

1、SQL执行 A 给 B 转账 A 1000 ——转——> 200 B 200

2、SQL执行 B 收到 A 的钱 A 800 ——收——> B 400

——————

事务原则:ACID原则 原子性,一致性,隔离性,持久性 (脏读,幻读,不可重复读)

原子性(Atomicity)

要么都成功,要么都失败

一致性(Consistency)

事务前后的数据完整性要保证一致(转帐前A B一共1000,转账后A B是也一共1000)

持久性(Durability)

事务一旦提交则不可逆,被持久化到数据库中

隔离性(Isolation)

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

隔离所导致的一些问题

脏读:

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

不可重复读:

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

虚读(幻读)

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

-- mysql 是默认开启事务自动提交的
set autocommit = 0 /* 关闭 */
set autocommit = 1 /* 开启 (默认的)*/
-- 手动处理事务
set autocommit = 0 -- 关闭自动提交
-- 事务开启
start transaction; -- 标记一个事务的开始,从这个之后的sql都在同一个事务内

insert xx;
insert xx;

-- 提交:持久化(成功!)
commit;
-- 回滚:回到原来的样子(失败!)
rollback;

-- 事务结束
set autocommit = 1; -- 开启自动提交

-- 了解
savepoint 存档点名; -- 设置一个事务的保存点
rollback to savepoint 存档点名; -- 回滚到保存点
release savepoint 存档点名; -- 撤销保存点

模拟场景

-- 转账
create database if not exists `shop` character set utf8 collate utf8_general_ci
use `shop`
create table if not exists `account`(
	`id` int(4) not null auto_increment,
	`name` varchar(30) not null,
	`money` decimal(9,2) not null,
	primary key(`id`)
)engine=innodb default charset=utf8
-- 模拟转账:事务
set autocommit = 0; -- 关闭自动提交
start transaction -- 开启一个事务
update `account` set `money` = `money` - 500 where `name` = 'A' -- A减500
update `account` set `money` = `money` + 500 where `name` = 'B' -- B加500
commit; -- 提交事务
rollback; -- 回滚
set autocommit = 1; -- 恢复默认

标签:autocommit,事务,set,--,money,提交,MySQL
From: https://www.cnblogs.com/studydreamlife/p/17183086.html

相关文章

  • MySQL函数
    1、常用函数--================常用函数==============--数学运算selectabs(-8)--绝对值selectceiling(9.4)--向上取整selectfloor(9.4)--向下取整sele......
  • MySql(7)—— 约束、存储引擎
    约束(非常重要)什么是约束?constraint在创建表的时候,我们可以给表中的字段加上一些约束,来保证这个表中数据的完整性、有效性!!!约束的作用:保证表中的数据有效约束的种类非空约......
  • 解决C#使用MySQL时,无法进行中文模糊查询的问题
    以前用MySQL用得少,也没出现过类似的问题,大概就是如下的情况1select*fromxxxxwherexxlike'%中文关键字%';在C#里进行更新时时,发现未查询到相关结果,在网上找了一......
  • MySQL安装入门第一篇
    【1】MySQL的版本:近期主要历史版本有5.0/5.1/5.5/5.6/5.7,目前最新版本是MySQL8.6.0曾经是个内部试验版本,已取消了。MySQL8.0的版本历史1)2016-09-12第一个DM(develop......
  • 分布式事务-XA
    什么是XA事务?XA(eXtendedArchitecture)是指由X/Open组织提出的分布式交易处理的规范。XA是一个分布式事务协议,由Tuxedo提出,所以分布式事务也称为XA事务。XA协议主要......
  • (数据库系统概论|王珊)第十章数据库恢复技术-第一、二节:事务的基本概念和数据库恢复概述
    pdf下载:密码7281专栏目录首页:【专栏必读】(考研复试)数据库系统概论第五版(王珊)专栏学习笔记目录导航及课后习题答案详解目录一:事务的基本概念(1)事务A:定义B:事务的定义(2)事......
  • 既然有MySQL了,为什么还要有Redis?
    一、同样是缓存,用map不行吗?Redis可以存储几十个G的数据,Map行吗?Redis的缓存可以进行本地持久化,Map行吗?Redis可以作为分布式缓存,Map只能在同一个JVM中进行缓存;Redis支持每秒百......
  • 18_Spring_事务管理注解方式
     事务的管理应该放在我们的service层进行处理spring中有两种事务的管理方式1编程式事务管理(了解) 2声明式事务管理(掌握)    基于注解方式实现(掌握) ......
  • 18_Spring_事务管理注解方式
     事务的管理应该放在我们的service层进行处理spring中有两种事务的管理方式1编程式事务管理(了解) 2声明式事务管理(掌握)    基于注解方式实现(掌握) ......
  • 18_Spring_事务管理注解方式
    ​ 事务的管理应该放在我们的service层进行处理spring中有两种事务的管理方式1编程式事务管理(了解) 2声明式事务管理(掌握)    基于注解方式实现(掌握)......