myslql事务示例
在 MySQL 中,事务(Transaction)是一组要么全部执行,要么全部不执行的SQL语句。这可以确保数据的一致性和完整性。事务管理的核心包括四个属性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),通常简称为ACID属性。
示例:使用事务管理
假设我们有两个账户表 accounts
,每个账户有一个唯一的ID和一个余额。我们将展示如何在两个账户之间进行资金转移,并确保这个操作是原子性的。
创建示例表并插入数据
CREATE TABLE accounts (account_id INT PRIMARY KEY,balance DECIMAL(10, 2)
);INSERT INTO accounts (account_id, balance) VALUES
(1, 1000.00),
(2, 2000.00);
使用事务进行资金转移
下面是一个示例,展示了如何在 MySQL 中使用事务进行账户之间的资金转移。
START TRANSACTION;-- 从账户1中扣款
UPDATE accounts
SET balance = balance - 100
WHERE account_id = 1;-- 向账户2中存款
UPDATE accounts
SET balance = balance + 100
WHERE account_id = 2;-- 检查账户1的余额是否不足以扣款
SELECT balance INTO @balance FROM accounts WHERE account_id = 1;
IF @balance < 0 THEN-- 如果余额不足,回滚事务ROLLBACK;SELECT 'Transaction failed: insufficient funds' AS message;
ELSE-- 如果余额充足,提交事务COMMIT;SELECT 'Transaction succeeded' AS message;
END IF;
解释
- START TRANSACTION:开始一个事务。
- UPDATE 语句:执行两次更新操作,分别从账户1中扣款并向账户2中存款。
- SELECT INTO 语句:检查账户1的余额是否不足以扣款。
- IF 语句:如果账户1的余额不足,回滚事务;否则,提交事务。
- ROLLBACK:如果余额不足,则回滚事务,取消所有先前执行的操作。
- COMMIT:如果余额充足,则提交事务,保存所有更改。
详细步骤
-
开始事务:
START TRANSACTION;
开始一个新的事务块。
-
执行更新操作:
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;
-
检查余额:
SELECT balance INTO @balance FROM accounts WHERE account_id = 1; IF @balance < 0 THEN-- 如果余额不足,回滚事务ROLLBACK;SELECT 'Transaction failed: insufficient funds' AS message; ELSE-- 如果余额充足,提交事务COMMIT;SELECT 'Transaction succeeded' AS message; END IF;
使用存储过程实现事务
将上述操作封装在存储过程中,更加清晰和模块化:
DELIMITER $$CREATE PROCEDURE transfer_funds(IN p_from_account_id INT,IN p_to_account_id INT,IN p_amount DECIMAL(10, 2)
)
BEGINDECLARE balance DECIMAL(10, 2);START TRANSACTION;-- 从源账户扣款UPDATE accountsSET balance = balance - p_amountWHERE account_id = p_from_account_id;-- 向目标账户存款UPDATE accountsSET balance = balance + p_amountWHERE account_id = p_to_account_id;-- 检查源账户余额是否充足SELECT balance INTO balance FROM accounts WHERE account_id = p_from_account_id;IF balance < 0 THEN-- 如果余额不足,回滚事务ROLLBACK;SELECT 'Transaction failed: insufficient funds' AS message;ELSE-- 如果余额充足,提交事务COMMIT;SELECT 'Transaction succeeded' AS message;END IF;
END$$DELIMITER ;
调用存储过程:
CALL transfer_funds(1, 2, 100.00);
总结
- 开始事务:使用
START TRANSACTION
。 - 提交事务:使用
COMMIT
。 - 回滚事务:使用
ROLLBACK
。
通过这些步骤,可以在 MySQL 中管理事务,确保数据一致性和完整性。
相关文章:
myslql事务示例
在 MySQL 中,事务(Transaction)是一组要么全部执行,要么全部不执行的SQL语句。这可以确保数据的一致性和完整性。事务管理的核心包括四个属性,即原子性(Atomicity)、一致性(Consiste…...
解决Flutter应用程序的兼容性问题
哈喽呀,大家好呀,淼淼又来和大家见面啦,Flutter作为一个跨平台的移动应用开发框架,极大地简化了开发者同时在Android和iOS平台上构建应用的难度。然而,由于不同设备、操作系统版本以及Flutter框架本身的变化࿰…...

整合微信支付一篇就够了
需要的工具 微信开发小程序工具 需要的材料 关键步骤 postman获取微信access_token https://api.weixin.qq.com/cgi-bin/token?appid=wxfssafa629021&grant_type=client_credential&secret=701d213dsfsdfsfdss4fb274生成h5跳转小程序的链接 https://api.weixin.…...

视创云展为企业虚拟展厅搭建,提供哪些功能?
在当下数字化浪潮中,如何为用户创造更富生动性和真实感的展示体验,已成为企业营销策略的核心。借助视创云展的线上虚拟3D企业展厅搭建服务,利用3D空间漫游和VR技术的融合,可以为用户呈现出一个既真实又充满想象力的全景图或三维模…...
c++ 常用的锁及用法介绍和示例
2024/6/21 14:20:10 在 C++ 中,常用的锁主要包括以下几种:std::mutex、std::recursive_mutex、std::timed_mutex 和 std::shared_mutex。这些锁可以帮助我们在多线程编程中保护共享数据,避免竞争条件。以下是每种锁的介绍及其用法示例: std::mutex std::mutex 是最基本的互…...

PostgreSQL源码分析——口令认证
认证机制 对于数据库系统来说,其作为服务端,接受来自客户端的请求。对此,必须有对客户端的认证机制,只有通过身份认证的客户端才可以访问数据库资源,防止非法用户连接数据库。PostgreSQL支持认证方法有很多࿱…...
Stability-AI(图片生成视频)
1.项目地址 GitHub - Stability-AI/generative-models: Generative Models by Stability AI 2.模型地址 魔搭社区 3.克隆项目后,按照教程安装 conda create --name Stability python3.10 conda activate Stability pip3 install -r requirements/pt2.txt py…...

Linux机器通过Docker-Compose安装Jenkins发送Allure报告
目录 一、安装Docker 二、安装Docker Compose 三、准备测试用例 四、配置docker-compose.yml 五、启动Jenkins 六、配置Jenkins和Allure插件 七、创建含pytest的Jenkins任务 八、项目结果通知 1.通过企业微信通知 2.通过邮件通知 九、配置域名DNS解析 最近小编接到一…...

基于Gunicorn+Flask+Docker模型高并发部署
关于猫头虎 大家好,我是猫头虎,别名猫头虎博主,擅长的技术领域包括云原生、前端、后端、运维和AI。我的博客主要分享技术教程、bug解决思路、开发工具教程、前沿科技资讯、产品评测图文、产品使用体验图文、产品优点推广文稿、产品横测对比文…...
java:类型变量(TypeVariable)解析--基于TypeResolver实现将类型变量替换为实际类型
上一篇博客《java:类型变量(TypeVariable)解析–获取泛型类(Generic Class)所有的类型变量(TypeVariable)的实际映射类型》中介绍如何如何正确解析泛型类的类型变量(TypeVariable),获取对应的实际类型。 有了类型变量(TypeVariable)–实际类型的映射,我们…...

ru俄罗斯域名如何申请SSL证书?
我们日常看到的都是com这种国际域名比较普遍,尤其是主流网站,主要原因考虑的其通用性,那么对于地方性的域名大家很少看到,比如俄罗斯国家域名.ru大家还是有些陌生的,但要说中国.CN域名那你就很熟悉了。 有用户在申请过…...
python实现购物车的功能
模拟购物车,准备一个列表 goodList [{name:笔记本电脑,price:8000}, {name:鼠标, price:100}] 5个函数 1.加入购物车 2.收藏商品 3.去结算 4.删除购物车商品 5.清空购物车 购物车 cartList [] 收藏列表 collectSet {笔记本电脑,鼠标} 数据示例 去结算计算出总价…...

日元预计明年开始上涨
被称为“日元先生”的前大藏省(现财务省)财务官榊原英资预测,美元兑日元汇率将在今年底或2025年初逐步升至130。他认为,通缩时代已经过去,通货膨胀即将来临。 《日本经济新闻》6月5日报道,日本财务省于5月3…...
8、PHP 实现二进制中1的个数、数值的整数次方
题目: 二进制中1的个数 描述: 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 <?phpfunction NumberOf1($n) {$count 0;if($n < 0){$n $n & 0x7FFFFFFF;$count;}while($n ! 0){$count;$n $n & ($n - 1…...
linux git凭证管理
linux git 凭证管理 解决命令行git登录github的问题,支持两步验证 同样适用于Azure Devops, Bitbucket 官网: https://github.com/git-ecosystem/git-credential-manager https://github.com/git-ecosystem/git-credential-manager/blob/release/docs/…...

WIC 图像处理初体验——读取像素的值
先放上运行结果: 可以发现红绿蓝是从后往前的。 必须以C方式编译代码! #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <wincodec.h>int main(void) {CoInitialize(nullptr);IWICImagingFactory* fac;CoCreateInstance(CLS…...
使用Server-Sent Events (SSE),并获取message里面的内容
什么是Server-Sent Events (SSE)? Server-Sent Events (SSE)是一种服务器推送技术,允许服务器向客户端(浏览器)发送实时消息。与WebSocket不同,SSE是单向通信,只能从服务器到客户端。SSE在HTML5中作为标准实现&#…...

LabVIEW项目管理中如何平衡成本、时间和质量
在LabVIEW项目管理中,平衡成本、时间和质量是实现项目成功的关键。通过制定详细的项目计划、合理分配资源、严格控制进度、进行质量保证和灵活应对变化,项目管理者可以有效地协调这三者的关系,确保项目按时、按质、按预算完成。 1. 制定详细…...
如何检查 Kubernetes 网络配置
简介 Kubernetes 是一个容器编排系统,可以管理集群中的容器化应用程序。在集群中保持所有容器之间的网络连接需要一些高级网络技术。在本文中,我们将简要介绍一些工具和技术,用于检查这种网络设置。 如果您正在调试连接问题,调查…...

如何将网站封装成App:小猪APP分发助你实现
你有没有想过,将你的网站变成一个App会是什么样子?想象一下,用户只需点击一下图标,就能立刻访问你的内容,而不是在浏览器中输入网址。这不仅提升了用户体验,还能增加用户粘性。这一切都可以通过将网站封装成…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...

Razor编程中@Html的方法使用大全
文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...
人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型
在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重,适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解,并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...
python打卡day47
昨天代码中注意力热图的部分顺移至今天 知识点回顾: 热力图 作业:对比不同卷积层热图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import D…...

Linux——TCP和UDP
一、TCP协议 1.特点 TCP提供的是面向连接、可靠的、字节流服务。 2.编程流程 (1)服务器端的编程流程 ①socket() 方法创建套接字 ②bind()方法指定套接字使用的IP地址和端口。 ③listen()方法用来创建监听队列。 ④accept()方法处理客户端的连接…...
Clickhouse统计指定表中各字段的空值、空字符串或零值比例
下面是一段Clickhouse SQL代码,用于统计指定数据库中多张表的字段空值情况。代码通过动态生成查询语句实现自动化统计,处理逻辑如下: 从系统表获取指定数据库(替换your_database)中所有表的字段元数据根据字段类型动态…...
Life:Internship finding
1. 前言 fishwheel writes this Blog to 记录自分自身在研二下找实习的经历。When 写这篇 Blog 的时候我的最后一搏也挂掉了,只能启用保底方案了。When I 打开我的邮箱时,发现里面有 nearly 100 多封与之相关的邮件,顿时感到有些心凉&#x…...

DiMTAIC 2024 数字医学技术及应用创新大赛-甲状腺B超静态及动态影像算法赛-参赛项目
参赛成绩 项目介绍 去年参加完这个比赛之后,整理了项目文件和代码,虽然比赛没有获奖,但是参赛过程中自己也很有收获,自己一个人搭建了完整的pipeline并基于此提交了多次提高成绩,现在把这个项目梳理成博客,…...
学习英语。
1. 先自己翻译一遍(葫芦背书法) 结构 补充修饰 最核心的记忆 然后再修饰 2.意群之间翻译: 1.意群 对于两个意群合起来翻译 方法1就是着重某一 6.或者意群之间 核心词一个介词 于 对于 介词化修饰 3.句子之间关系 主句1 after句子2 那么句…...