七天掌握SQL--->第四天:事务处理与并发控制

 

# 7天掌握SQL - 第四天:事务处理与并发控制

## 目标

- 学习事务处理的基本概念,如ACID特性。
- 掌握并发控制的方法,如锁机制、事务隔离级别等。
- 通过实际案例练习事务处理和并发控制。

 

## 1. 事务处理的基本概念

事务处理是数据库管理系统中的一个重要概念,它确保了数据的完整性和一致性。一个事务可以包含一个或多个数据库操作,这些操作要么全部成功,要么全部失败。

### 表格:事务的特点

| 特点   | 描述                                                         |
| ------ | ------------------------------------------------------------ |
| 原子性  | 事务中的所有操作要么全部完成,要么全部不完成。               |
| 一致性  | 事务必须使数据库从一个一致性状态转换到另一个一致性状态。   |
| 隔离性  | 事务的执行不会被其他事务干扰。                             |
| 持久性  | 一旦事务提交,其结果就是永久性的,即使系统故障也不会丢失。 |

### 例子代码:简单的事务操作

```sql
-- 开始事务
START TRANSACTION;

-- 执行一些数据库操作
INSERT INTO users (name, email) VALUES ('John Doe', 'john@example.com');
UPDATE users SET email = 'john.doe@example.com' WHERE name = 'John Doe';

-- 提交事务
COMMIT;
```

## 2. ACID特性

ACID是事务处理的四个关键特性,它们共同确保了事务的可靠性。

### 表格:ACID特性详解

| 特性   | 描述                                                         |
| ------ | ------------------------------------------------------------ |
| 原子性  | 事务中的所有操作要么全部成功,要么全部失败回滚。             |
| 一致性  | 事务必须保持数据的一致性,从一个一致性状态转换到另一个一致性状态。 |
| 隔离性  | 事务的执行不会被其他事务干扰,事务之间是隔离的。             |
| 持久性  | 一旦事务提交,其结果就是永久性的,即使系统故障也不会丢失。   |

### 例子代码:演示ACID特性

```sql
-- 原子性演示
START TRANSACTION;
INSERT INTO orders (product_id, quantity) VALUES (101, 2);
-- 假设这里发生错误
ROLLBACK;

-- 一致性演示
START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;
COMMIT;

-- 隔离性演示
START TRANSACTION;
SELECT * FROM accounts WHERE account_id = 1;
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
-- 另一个事务
START TRANSACTION;
SELECT * FROM accounts WHERE account_id = 1;
-- 这里看到的balance可能还没有更新
ROLLBACK;

-- 持久性演示
START TRANSACTION;
INSERT INTO logs (message) VALUES ('This is a log entry');
COMMIT;
-- 即使系统重启,这条日志也会被保留
```

## 3. MySQL中的事务处理命令

在MySQL中,事务处理可以通过以下命令来控制。

### 表格:MySQL事务处理命令

| 命令          | 描述                             |
| ------------- | -------------------------------- |
| START TRANSACTION | 开始一个新的事务。               |
| COMMIT        | 提交当前事务,使所有更改永久生效。   |
| ROLLBACK      | 回滚当前事务,撤销所有更改。       |
| SAVEPOINT     | 设置一个保存点,可以回滚到此点。   |

### 例子代码:使用事务处理命令

```sql
-- 开始事务
START TRANSACTION;

-- 执行一些操作
INSERT INTO products (name, price) VALUES ('Laptop', 1200);

-- 设置保存点
SAVEPOINT sp1;

-- 执行一些可能会失败的操作
UPDATE products SET price = 1100 WHERE name = 'Laptop';

-- 如果操作失败,回滚到保存点
ROLLBACK TO sp1;

-- 提交事务
COMMIT;
```

## 4. 并发控制的方法

并发控制是确保多个事务可以同时执行而不会导致数据不一致性的方法。

### 表格:并发控制方法

| 方法   | 描述                                                         |
| ------ | ------------------------------------------------------------ |
| 锁机制  | 通过锁定数据行或表来控制并发访问。                             |
| 事务隔离级别 | 定义事务可以看到其他事务的哪些更改。                             |

### 例子代码:并发控制

```sql
-- 锁机制演示
LOCK TABLES products WRITE;

-- 执行一些操作
UPDATE products SET price = 1100 WHERE name = 'Laptop';

-- 解锁
UNLOCK TABLES;

-- 事务隔离级别演示
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
START TRANSACTION;
SELECT * FROM products WHERE name = 'Laptop';
UPDATE products SET price = 1200 WHERE name = 'Laptop';
COMMIT;
```

## 5. 锁机制

锁机制是数据库并发控制的一种方式,它通过锁定数据行或表来防止数据不一致。

### 表格:锁的类型

| 锁类型   | 描述                                                         |
| -------- | ------------------------------------------------------------ |
| 共享锁   | 允许多个事务读取同一数据,但不允许修改。                       |
| 排他锁   | 允许事务修改数据,但不允许其他事务读取或修改。                 |

### 例子代码:使用锁

```sql
-- 共享锁
SELECT * FROM products WHERE name = 'Laptop' LOCK IN SHARE MODE;

-- 排他锁
SELECT * FROM products WHERE name = 'Laptop' FOR UPDATE;
```

## 6. 事务隔离级别

事务隔离级别定义了事务可以看到其他事务的哪些更改,以及何时可以看到这些更改。

### 表格:事务隔离级别

| 隔离级别   | 描述                                                         |
| ---------- | ------------------------------------------------------------ |
| READ UNCOMMITTED | 一个事务可以看到其他事务未提交的更改。                     |
| READ COMMITTED   | 一个事务只能看到其他事务已提交的更改。                     |
| REPEATABLE READ  | 一个事务可以看到它开始时已经存在的数据,并且在事务期间不会被其他事务修改。 |
| SERIALIZABLE    | 最高的隔离级别,事务完全隔离,一个事务执行时,其他事务不能并发执行。 |

### 例子代码:设置事务隔离级别

```sql
-- 设置事务隔离级别为可重复读
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;

-- 开始事务
START TRANSACTION;

-- 执行查询
SELECT * FROM products WHERE name = 'Laptop';

-- 执行更新
UPDATE products SET price = 1300 WHERE name = 'Laptop';

-- 提交事务
COMMIT;
```

## 7. 实际案例练习

让我们通过一个实际案例来练习事务处理和并发控制。

### 案例:库存管理系统

假设我们有一个库存管理系统,需要处理订单和库存。

### 例子代码:库存管理系统

```sql
-- 开始事务
START TRANSACTION;

-- 检查库存
SELECT stock FROM inventory WHERE product_id = 101;

-- 减少库存
UPDATE inventory SET stock = stock - 1 WHERE product_id = 101;

-- 添加订单
INSERT INTO orders (product_id, quantity) VALUES (101, 1);

-- 提交事务
COMMIT;
```

## 8. 总结

在今天的学习中,我们了解了事务处理的基本概念,包括ACID特性,以及MySQL中的事务处理命令。我们还学习了并发控制的方法,包括锁机制和事务隔离级别,并通过实际案例进行了练习。事务处理和并发控制是确保数据库数据一致性和完整性的关键技术,掌握它们对于数据库管理员和开发者来说至关重要。

通过今天的学习,你应该能够:

- 理解事务处理的基本概念和ACID特性。
- 掌握MySQL中的事务处理命令。
- 理解并发控制的方法,包括锁机制和事务隔离级别。
- 通过实际案例练习事务处理和并发控制。

希望这些内容能帮助你更好地理解和应用事务处理与并发控制。记得多加练习,以便在实际工作中能够熟练运用这些知识。
 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024强网拟态决赛-eBeepf

漏洞分析与利用 分析后面看情况吧&#xff0c;有时间再写吧&#xff0c;先贴个利用脚本&#xff1a; #ifndef _GNU_SOURCE #define _GNU_SOURCE #endif#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <fcntl.h> #include <…

Duolingo「多邻国」v6.9.0 解锁Max高级版

前言 Duolingo是一个特别有名的学语言的应用软件&#xff0c;你可以用它来学西班牙语、法语、德语、意大利语、俄语等等好多种语言。当然&#xff0c;用它来学英语也是个不错的选择。 安装环境 [名称]&#xff1a;Duolingo「多邻国」 [大小]&#xff1a;79MB [版本]&#x…

鸿蒙开发-音视频

Media Kit 特点 一般场合的音视频处理&#xff0c;可以直接使用系统集成的Video组件&#xff0c;不过外观和功能自定义程度低Media kit&#xff1a;轻量媒体引擎&#xff0c;系统资源占用低支持音视频播放/录制&#xff0c;pipeline灵活拼装&#xff0c;插件化扩展source/demu…

基于SSM的婚庆管理系统+LW示例参考

1.项目介绍 系统角色&#xff1a;管理员、商家&#xff08;婚庆公司&#xff09;、用户功能模块&#xff1a;管理员&#xff08;用户管理、商家管理、摄影风格管理、礼服款式管理、案例管理、婚车品牌管理、婚纱拍摄管理、策划服务管理、婚宴酒店管理、婚车套餐管理、在线咨询…

manin动画编程(安装+入门)

文章目录 1.基本介绍2.效果展示3.安装步骤3.1安装manba软件3.2配置环境变量3.3查看是否成功3.4什么是mamba3.5创建虚拟环境3.6尝试进入虚拟环境 4.vscode操作4.1默认配置文件 5.安装ffmpeg6.安装manim软件6.vscode制作7.我的学习收获 1.基本介绍 这个manim就是一款软件&#x…

CH595 驱动数码管

先上原理图 我手里的是型号SR410361K的 4段数码管是共阳的&#xff08;低电平驱动&#xff09;&#xff0c;先发送数据&#xff0c;然后发送片选 共阴 共阳的图如下&#xff1a; 如何测量呢&#xff1f; 首先将数字万用表档位调节到蜂鸣器/二极管档&#xff0c;红表笔和黑表笔…

Vue生命周期详解

目录 1.beforeCreate2.created3.beforeMount4.mounted5.beforeUpdate6.updated7.beforeUnmount&#xff08;beforeDestroy&#xff09;8.unmounted&#xff08;destroyed&#xff09; 1.beforeCreate 分析 beforeCreate执行时Vue实例还没有被创建&#xff0c;data和methods也…

MySQL底层概述—1.InnoDB内存结构

大纲 1.InnoDB引擎架构 2.Buffer Pool 3.Page管理机制之Page页分类 4.Page管理机制之Page页管理 5.Change Buffer 6.Log Buffer 1.InnoDB引擎架构 (1)InnoDB引擎架构图 (2)InnoDB内存结构 (1)InnoDB引擎架构图 下面是InnoDB引擎架构图&#xff0c;主要分为内存结构和磁…

【力扣算法题】双指针-战场上的矛与盾的组合(移动零)(快乐数)

前言 &#x1f31f;&#x1f31f;本期讲解关于力扣算法两道双指针题目解析~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &#x1f386;那么…

第三十九篇 ShuffleNet V1、V2模型解析

摘要 ShuffleNet V1 ShuffleNet V1是由旷视科技&#xff08;Megvii&#xff0c;又称Face&#xff09;在2017年底提出的一种轻量级卷积神经网络架构。该网络专为移动设备和边缘计算环境设计&#xff0c;旨在以较低的计算资源实现高效的图像分类和其他计算机视觉任务。 特点与…

Springboot系列之:创建Springboot项目,Springboot整合MyBatis-plus

Springboot系列之&#xff1a;创建Springboot项目&#xff0c;Springboot整合MyBatis-plus 一、快速创建Spring boot项目二、项目完整目录三、pom.xml四、application.yaml五、实体类六、mapper七、IService接口八、Service实现类九、配置类十、枚举十一、增删改查测试类十二、…

C++:用红黑树封装map与set-1

文章目录 前言一、STL源码分析二、红黑树的构建三、map与set整体框架的搭建与解析四、如何取出进行比较&#xff1f;1. met与set的数据是不同的2. 取出数据进行比较1&#xff09;问题发现2&#xff09;仿函数解决 五、封装插入六、迭代器的实现1. operator* 与operator->2. …

Perforce《2024游戏技术现状报告》Part3:生成式AI、版本控制、CI/CD等游戏技术的未来趋势与应用

游戏开发者一直处于创新前沿。他们的实践、工具和技术受到各行各业的广泛关注&#xff0c;正在改变着组织进行数字创作的方式。 近期&#xff0c;Perforce发布了《2024游戏技术现状报告》&#xff0c;通过收集来自游戏、媒体与娱乐、汽车和制造业等高增长行业的从业者、管理人…

4-SpringCloud整合服务间的调用即负载均衡

springcloud目录&#xff1a; 1.Spring Cloud简介 2.SpringCloud整合eureka注册中心 3.SpringCloud整合服务注册 4.SpringCloud整合服务间的调用即负载均衡 5.SpringCloud整合Feign调用 6.SpringCloud整合config配置中心 7.SpringCloud整合zuul路由网关 我们复制一个yqx-user服…

Elasticsearch客户端在和集群连接时,如何选择特定的节点执行请求的?

大家好&#xff0c;我是锋哥。今天分享关于【Elasticsearch客户端在和集群连接时&#xff0c;如何选择特定的节点执行请求的&#xff1f;】面试题。希望对大家有帮助&#xff1b; Elasticsearch客户端在和集群连接时&#xff0c;如何选择特定的节点执行请求的&#xff1f; 100…

深入浅出,快速安装并了解汇编语言

1.什么是汇编语言 了解汇编语言需要先从了解机器语言开始&#xff0c;在计算机发展的初期阶段&#xff0c;机器语言是计算机直接理解和执行的二进制代码语言&#xff0c;其核心特点包括直接执行性、资源高效性、学习难度大以及平台依赖性。它主要由指令码构成&#xff0c;这些…

2.2_3 纠错编码—海明码

目录 1、海明码的纠错过程 2、海明距离 3、确认检验码位数 4、确定校验码和数据的位置 5、求出校验码的值 6、检错并纠错 方法一 方法二 1、海明码的纠错过程 2、海明距离 两个合法编码(码字)的对应比特取值不同的比特数称为这两个码字的海明距离(码距)&#xff0c;一…

1992-2021年 各省市县经过矫正的夜间灯光数据(GNLD、VIIRS)区域汇总:省份、城市、区县面板数据

1992-2021年 各省市县经过矫正的夜间灯光数据&#xff08;GNLD、VIIRS&#xff09;区域汇总&#xff1a;省份、城市、区县面板数据 .r.rar https://download.csdn.net/download/2401_84585615/90001905 从1992年至2021年&#xff0c;中国各省份、城市及区县的夜间灯光数据经过…

微信小程序上传微信官方审核流程(1)

1&#xff0c;打开微信开发者工具 2&#xff0c;微信开发者工具右上角有一个上传按钮&#xff0c;点击上传按钮 3&#xff0c;点击完上传按钮会弹出一个上传成功的提示&#xff0c;点击提示框中的确定按钮 4&#xff0c;点击完确定按钮后会显示填写版本好和项目备注 5&#x…

快速获取镜像包的方法

1、当我们需要在无网络的环境中&#xff0c;在Docker环境中安装某个镜像时&#xff0c;需要先下载这个镜像包后&#xff0c;再上传 2、下面以在minio为例 在有网络的电脑中使用使用命令下载 docker pull minio/minio将下载好的tar包保存到指定的目录下 save -o /home/cl/app…