SQL 事务

news2024/9/9 0:43:49

栏目总目录


概念

  • 定义:事务是一组操作的集合,这些操作被当作一个单独的工作单元来执行。事务中的所有操作要么全部成功,要么全部失败,从而保持数据的一致性和完整性。
  • 作用:确保数据库从一个一致性状态转换到另一个一致性状态,即使系统发生故障,也不会破坏事务的完整性。

四大特性(ACID)

  • 原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
  • 一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。
  • 隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
  • 持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。

事务的操作

  • MySQL示例
-- 开始事务
START TRANSACTION;

-- 执行SQL语句
INSERT INTO accounts (name, balance) VALUES ('Alice', 1000);
UPDATE accounts SET balance = balance - 500 WHERE name = 'Alice';
UPDATE accounts SET balance = balance + 500 WHERE name = 'Bob';

-- 检查是否有错误发生(这里仅为示例,实际中需要根据具体业务逻辑检查)
-- 假设一切正常,提交事务
COMMIT;

-- 如果发生错误,则回滚事务
-- ROLLBACK;
  • SQL Server示例
-- 开始事务
BEGIN TRANSACTION;

-- 执行SQL语句
INSERT INTO accounts (name, balance) VALUES ('Alice', 1000);
UPDATE accounts SET balance = balance - 500 WHERE name = 'Alice';
UPDATE accounts SET balance = balance + 500 WHERE name = 'Bob';

-- 检查是否有错误发生(这里仅为示例,实际中需要根据具体业务逻辑检查)
-- 假设一切正常,提交事务
COMMIT TRANSACTION;

-- 如果发生错误,则回滚事务
-- ROLLBACK TRANSACTION;

隔离级别

  • 未提交读(Read Uncommitted):事务可以读取未提交的数据,可能导致脏读、不可重复读和幻读。
  • 提交读(Read Committed):事务只能读取已提交的数据,可以避免脏读,但仍可能出现不可重复读和幻读。
  • 可重复读(Repeatable Read):事务保证在事务执行期间对同一行的读取结果是一致的,可以避免脏读和不可重复读,但仍可能出现幻读。
  • 串行化(Serializable):事务进行排他锁,保证事务执行期间对同一行的读取和写入是串行化的,可以避免脏读、不可重复读和幻读,但可能导致性能问题。

并发问题

  • 脏读:一个事务读取了另一个事务尚未提交的数据。
  • 不可重复读:一个事务在多次读取同一行数据时,得到了不同的结果。
  • 幻读:一个事务在多次读取同一范围的数据时,得到了不同数量的行。
  • MySQL设置隔离级别
-- 设置事务隔离级别为可重复读
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;

-- 或者,在启动事务之前设置
SET GLOBAL TRANSACTION ISOLATION LEVEL REPEATABLE READ;
  • SQL Server设置隔离级别
-- 设置事务隔离级别为可重复读
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

-- 注意:SQL Server中的可重复读隔离级别实际上比标准SQL中的定义更强,它可以防止幻读

应用场景

  • 金融交易:如银行转账,需要确保转账的双方账户金额变动同时成功或同时失败。
  • 订单处理:在电商系统中,订单生成、库存减少、支付处理等操作需要作为一个事务来执行。
  • 数据迁移:在数据迁移过程中,需要确保数据的一致性,避免数据丢失或重复。

注意事项

  • 合理设计事务:避免设计过大的事务,以减少锁定资源的时间和范围。
  • 正确设置隔离级别:根据业务需求和数据一致性要求,选择合适的隔离级别。
  • 处理异常和错误:在事务执行过程中,要妥善处理可能出现的异常和错误,确保事务的完整性和一致性。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue2+cesium实现报警特效

实现效果: 录制_2024_07_29_21_36_33_571 实现步骤如下: 1、安装cesium包:npm install cesium 2、在node-modules中找到刚刚安装的cesium,在文件夹中里面有一个Build文件夹,把Build里面的Cesium复制出来丢到public中 3、在index.html中进行引入: 4、新建一个js文件,…

前端常见场景、JS计算精度丢失问题(Decimal.js 介绍)

目录 一. Decimal.js 介绍 二. 常用方法 1. 创建 Decimal 实例 2.加法 add 或 plus 3.减法 sub 或 minus 4.乘法 times 或 mul 5.除法 div 或 dividedBy 6.取模 7.幂运算 8.平方根 9.保留小数位 toFixed方法(四舍五入) 三.项目应用 前端精度丢失问题通常由以下原因…

无线融合,智能协同:ECWAN打造物联网高效协同网络

关键词:资产管理、ECWAN、无线混合组网、用电监测、用电计量、广域基站、计量插座、边缘协同 在当今快速发展的物联网领域,每天都有数以亿计的设备互相通信,形成庞大而复杂的网络生态。在这样的背景下,ECWAN技术以其灵活、高效和智…

【Linux】TCP全解析:构建可靠的网络通信桥梁

文章目录 前言1. TCP 协议概述2. TCP报头结构3. 如何理解封装和解包呢?4. TCP的可靠性机制4.1 TCP的确认应答机制 4.2 超时重传机制5. TCP链接管理机制5.1 经典面试题:为什么建立连接是三次握手?5.2 经典面试题:为什么要进行四次挥…

读零信任网络:在不可信网络中构建安全系统04最小特权

1. 公钥基础设施 1.1. PKI 1.2. 数字证书本身并不能解决身份认证问题 1.2.1. 需要一种方法来验证获得的公钥的确属于某人 1.2.2. 公钥基础设施(PKI)解决了这个问题 1.3. PKI定义了一组角色及其职责,能够在不可信的网络中安全地分发和验证…

【Websim.ai】一句话让AI帮你生成一个网页

【Websim.ai】一句话让AI帮你生成一个网页 网站链接 websim.ai 简介 websim.ai接入了Claude Sonnet 3.5,GPT-4o等常用的LLM,只需要在websim.ai的官网指令栏中编写相关指令,有点类似大模型的Prompt,指令的好坏决定了网页生成的…

Lc63---1859将句子排序(排序)---Java版(未写完)

1.题目描述 2.思路 (1)首先将句子按空格分割成若干单词。 (2)每个单词的最后一个字符是它的位置索引。我们可以通过这个索引将单词恢复到正确的位置。 (3)按照单词的索引顺序排序这些单词。 (4…

【已解决】嵌入式linux mobaxterm unable to open connection to comx 串口正常连接,但终端无法输入

1.点击Session重新选择串口,注意看看串口是不是连接到虚拟机,导致串口被占用。 2.选择PC机与开发板连接的串口,不知道的话可以打开设备管理器看看,选择正确的波特率,一般是115200。 3.关键一步:选择后别急…

性能测试:深入探索与实战指南

大家好,我是一名测试开发工程师,已经开源一套【自动化测试框架】和【测试管理平台】,欢迎大家联系我,一起【分享测试知识,交流测试技术】 在当今这个信息化、数字化的时代,软件系统的性能直接关乎到用户体验…

使用 Matlab 绘制带有纹理的柱状图

以下是效果 1. 在 Matlab 里安装两个额外的库: hatchfill2 和 legendflex。 (1)搜索并安装 hatchfill2,用来画纹理 (2) 搜索并安装 legendflex,用来画自定义的图例 2. 代码(说明见注释) data …

Centos 7系统(最小化安装)安装Git 、git-man帮助、补全git命令-详细文章

安装之前由于是最小化安装centos7安装一些开发环境和工具包 文章使用国内阿里源 cd /etc/yum.repos.d/ && mkdir myrepo && mv * myrepo&&lscurl -O https://mirrors.aliyun.com/repo/epel-7.repo;curl -O https://mirrors.aliyun.com/repo/Centos-7…

docker安装phpMyAdmin

直接安装phpMyAdmin需要有php环境,比较麻烦,总结了使用docker安装方法,并提供docker镜像。 1.docker镜像 见我上传的docker镜像:https://download.csdn.net/download/taotao_guiwang/89595177 2.安装 1).加载镜像 docker load …

(leetcode学习)24. 两两交换链表中的节点

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示例 1: 输入:head [1,2,3,4] 输出:[2,1,4…

Sonatype Nexus Repository搭建与使用(详细教程3.70.1)

目录 一. 环境准备 二. 安装jdk 三. 搭建Nexus存储库 四. 使用介绍 一. 环境准备 主机名IP系统软件版本配置信息nexus192.168.226.26Rocky_linux9.4 Nexus Repository 3.70.1 MySQL8.0 jdk-11.0.23 2核2G,磁盘20G 进行时间同步,关闭防火墙和selinux…

秋招突击——7/29——操作系统——网络IO

文章目录 引言基础知识零拷贝传统文件读取传统文件传输零拷贝mmap writesendifle 网络通信IO模型阻塞IO非阻塞IO IO多路复用模型selectpollselect和poll的总结epoll边缘触发ET和水平触发LT 信号驱动IO模型异步IO 面试题库1、说一下Linux五种IO模型2、阻塞IO和非阻塞IO应用场景…

可视化目标检测算法推理部署(一)Gradio的UI设计

引言 在先前RT-DETR模型的学习过程中,博主自己使用Flask框架搭建了一个用于模型推理的小案例: FlaskRT-DETR模型推理 在这个过程中,博主需要学习Flask、HTML等相关内容,并且博主做出的页面还很丑,那么,是…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第六十六章 电容屏触摸驱动实验

i.MX8MM处理器采用了先进的14LPCFinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

1.5 1.6 操作系统引导 虚拟机

操作系统引导 操作系统引导的概念 操作系统引导是指计算机利用CPU运行特定程序,通过程序识别硬盘,识别硬盘分区,识别硬盘分区上的操作系统,最后通过程序启动操作系统,一环扣一环地完成上述过程 操作系统引导的过程 …

分布式锁 Redis+RedisSon

文章目录 1.什么是分布式锁2.分布式锁应该具备哪些条件3.分布式锁主流的实现方案4.未添加分布式锁存在的问题4.1测试未添加分布式锁的代码通过jmeter发送请求4.2 添加线程同步锁集群部署配置nginx修改jmeter端口号4.3 使用redis的setnx命令实现分布式锁解决办法4.4 使用try、fi…

【2025留学】德国留学真的很难毕业吗?为什么大家不来德国留学?

大家好!我是德国Viviane,一句话讲自己的背景:本科211,硕士在德国读的电子信息工程。 之前网上一句热梗:“德国留学三年将是你人生五年中最难忘的七年。”确实,德国大学的宽进严出机制,延毕、休…