当前位置: 首页 > news >正文

〔 MySQL 〕事务管理

事务代码目录

1. 设置事务隔离级别

2. 开启事务

3. CRUD操作

3.1 创建(Create)

3.2 读取(Read)

3.3 更新(Update)

3.4 删除(Delete)

4. 提交或回滚事务

5. 示例:完整的事务流程

CURD不加控制可能出现的问题

CURD满足的属性(ACID)

什么是事务?

事务的版本支持

事务提交方式

事务操作注意事项

事务隔离级别

1. 事务隔离性的理解

2. 隔离级别

2.1 读未提交(Read Uncommitted)
2.2 读已提交(Read Committed)
2.3 可重复读(Repeatable Read)
2.4 串行化(Serializable)

3. 实现隔离级别的锁机制

4. 查看与设置隔离级别

4.1 查看隔离级别
4.2 设置隔离级别

5. 隔离级别的影响

6. 一致性(Consistency)

7. 总结

如何理解隔离性2 -

数据库并发场景
MVCC(多版本并发控制)
MVCC 解决的问题
MVCC 的前提知识
3个记录隐藏列字段
undo日志
Read View
MVCC 执行流程
Read View 与 MVCC
隔离级别与 MVCC
快照读与当前读
隔离级别的影响
总结
多版本并发控制(MVCC)如何工作

事务代码

1. 设置事务隔离级别

在MySQL中,您可以通过以下命令设置事务的隔离级别:

-- 设置当前会话的事务隔离级别为READ UNCOMMITTED
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;-- 设置当前会话的事务隔离级别为READ COMMITTED
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;-- 设置当前会话的事务隔离级别为REPEATABLE READ
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;-- 设置当前会话的事务隔离级别为SERIALIZABLE
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;

2. 开启事务

在进行CRUD操作之前,您需要开启一个事务:

-- 开始一个新的事务
START TRANSACTION;

或者使用BEGIN关键字:

-- 开始一个新的事务
BEGIN;

3. CRUD操作

创建(Create)
-- 插入数据
INSERT INTO table_name (column1, column2) VALUES (value1, value2);
读取(Read)
-- 查询数据
SELECT * FROM table_name WHERE condition;
更新(Update)
-- 更新数据
UPDATE table_name SET column1 = value1 WHERE condition;
删除(Delete)
-- 删除数据
DELETE FROM table_name WHERE condition;

4. 提交或回滚事务

在完成CRUD操作后,您可以选择提交事务以保存更改,或者回滚事务以撤销更改:

-- 提交事务,保存所有更改
COMMIT;-- 或者使用以下命令
COMMIT WORK;
-- 回滚事务,撤销所有更改
ROLLBACK;-- 或者使用以下命令
ROLLBACK WORK;

5. 示例:完整的事务流程

以下是一个完整的事务流程示例,包括设置隔离级别、开启事务、执行CRUD操作、提交事务:

-- 设置会话的事务隔离级别为REPEATABLE READ
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;-- 开始一个新的事务
BEGIN;-- 插入一条记录
INSERT INTO account (id, name, balance) VALUES (1, 'John Doe', 1000.00);-- 查询记录
SELECT * FROM account WHERE id = 1;-- 更新记录
UPDATE account SET balance = balance - 100.00 WHERE id = 1;-- 删除记录
DELETE FROM account WHERE id = 1;-- 提交事务,保存所有更改
COMMIT;

请注意,实际使用时需要根据您的具体表名和字段名来调整上述SQL语句。此外,事务的使用应根据您的业务逻辑和数据一致性需求来决定。

CURD不加控制可能出现的问题

  1. 原子性问题:操作可能无法作为一个整体成功或失败,部分操作成功而部分失败,导致数据状态不一致。
  2. 一致性问题:数据完整性可能被破坏,因为操作没有遵循预设规则,导致数据不准确或不连贯。
  3. 隔离性问题:多个事务并发执行时,可能会互相干扰,导致脏读、不可重复读或幻读等问题。
  4. 持久性问题:操作可能在系统故障后无法恢复,导致数据丢失。

CURD满足的属性(ACID)

  1. 原子性(Atomicity):确保事务中的所有操作要么全部完成,要么全部不完成,不会结束在中间某个环节。如果事务执行过程中发生错误,会被回滚到事务开始前的状态。

  2. 一致性(Consistency):保证事务开始之前和事务结束以后,数据库的完整性没有被破坏,写入的数据完全符合所有预设规则。

  3. 隔离性(Isolation):允许多个并发事务同时对数据进行读写和修改,而不会导致数据不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(Read committed)、可重复读(Repeatable read)和串行化(Serializable)。

  4. 持久性(Durability):事务处理结束后,对数据的修改就是永久的,即使系统故障也不会丢失。

什么是事务?

事务是一组DML(Data Manipulation Language)语句的集合,这些语句在逻辑上存在相关性,必须要么全部成功,要么全部失败。MySQL提供事务机制来保证这些DML语句能够作为一个整体执行,确保数据的一致性和完整性。

事务的版本支持

  • 只有使用了InnoDB存储引擎的数据库或表才支持事务,MyISAM不支持。

事务提交方式

  • 自动提交:每条DML语句默认作为一个单独的事务自动提交。
  • 手动提交:通过显式开始事务(BEGINSTART TRANSACTION)和提交事务(COMMIT)来控制事务的边界。

事务操作注意事项

  • 如果没有设置保存点,也可以回滚,只能回滚到事务的开始。直接使用ROLLBACK(前提是事务还没有提交)。
  • 如果一个事务被提交了(COMMIT),则不可以回退(ROLLBACK)。
  • 可以选择回退到哪个保存点。

事务隔离级别

  • 读未提交(Read Uncommitted):事务可以看到其他事务未提交的执行结果。
  • 读提交(Read Committed):事务只能看到其他已经提交的事务所做的改变。
  • 可重复读(Repeatable Read):在同一事务中,多次读取操作会看到同样的数据行。
  • 串行化(Serializable):事务的最高隔离级别,通过强制事务排序,使之不可能相互冲突,解决了幻读问题。

总结

事务通过ACID属性确保数据的一致性、完整性和持久性。在并发环境下,事务隔离级别控制不同事务之间的可见性,以避免脏读、不可重复读和幻读等问题。正确使用事务可以简化编程模型,避免考虑各种潜在的错误和并发问题。

事务隔离级别不同对性能有什么影响?

事务隔离级别对数据库性能的影响主要体现在并发处理能力和锁的粒度上。不同的隔离级别通过不同的锁机制来保证事务的隔离性,而这些锁机制又会影响数据库操作的并发性。以下是各个隔离级别对性能影响的概述:

读未提交(Read Uncommitted):

性能影响:此隔离级别最低,因为它允许事务读取未提交的数据,因此不需要在读取数据时加锁,从而减少了锁的争用,提高了并发性能。但是,这种隔离级别会引发脏读问题,因此在实际生产环境中很少使用。
读已提交(Read Committed):

性能影响:此隔离级别较高,它确保事务只能读取到其他事务已经提交的数据。在读操作时,会使用行级锁或表级锁,读操作完成后立即释放锁,这样可以减少锁的持有时间,提高并发性能。但是,它可能会导致不可重复读的问题。
可重复读(Repeatable Read):

性能影响:这是MySQL InnoDB的默认隔离级别。它确保在同一事务中多次读取同样的记录时,结果保持一致,即使其他事务在这期间对数据进行了修改。这个级别通过多版本并发控制(MVCC)来实现,不需要在读取数据时加锁,从而提高了读操作的并发性。但是,写操作需要加锁,可能会降低写操作的并发性能。
串行化(Serializable):

性能影响:这是最高的隔离级别,它通过锁定整个范围的数据行来防止幻读,实际上是将事务序列化执行,确保同一时间只有一个事务在运行。这种隔离级别避免了所有并发问题,但代价是极大的降低了并发性能,因为它几乎完全限制了事务的并发执行。
总的来说,隔离级别越高,数据的一致性和完整性越有保障,但并发性能越低。反之,隔离级别越低,数据库的并发性能越高,但数据的一致性和完整性风险越大。因此,在实际应用中,需要根据业务需求和性能要求来选择合适的隔离级别,以平衡数据一致性和并发性能。

事务隔离级别

1. 事务隔离性的理解

事务隔离性是指在并发环境下,不同事务之间的相互影响程度。隔离性确保事务在执行过程中不受其他事务的干扰,保证数据的一致性和完整性。

2. 隔离级别

2.1 读未提交(Read Uncommitted)

  • 脏读:可能读取到其他事务未提交的数据。
  • 不可重复读:可能。
  • 幻读:可能。

2.2 读已提交(Read Committed)

  • 脏读:不可能。
  • 不可重复读:可能。
  • 幻读:可能。

2.3 可重复读(Repeatable Read)

  • 脏读:不可能。
  • 不可重复读:不可能。
  • 幻读:可能。

2.4 串行化(Serializable)

  • 脏读:不可能。
  • 不可重复读:不可能。
  • 幻读:不可能。

3. 实现隔离级别的锁机制

隔离性主要通过锁机制实现,包括表锁、行锁、读锁、写锁、间隙锁(GAP)和Next-Key锁(GAP+行锁)。

4. 查看与设置隔离级别

4.1 查看隔离级别

SELECT @@global.tx_isolation; -- 查看全局隔离级别
SELECT @@session.tx_isolation; -- 查看会话隔离级别
SELECT @@tx_isolation; -- 默认同上

4.2 设置隔离级别

SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE};

5. 隔离级别的影响

  • 读未提交:几乎没有加锁,效率高,但问题多,不推荐使用。
  • 读已提交:避免了脏读,但仍有不可重复读和幻读问题。
  • 可重复读:MySQL默认隔离级别,解决了不可重复读问题,但存在幻读问题。
  • 串行化:最严格的隔离级别,避免了所有并发问题,但效率低,不推荐使用。

6. 一致性(Consistency)

事务执行的结果必须使数据库从一个一致性状态变到另一个一致性状态。一致性通过原子性来保证。

7. 总结

  • 隔离级别越严格,安全性越高,但并发性能越低。
  • 需要在安全性和并发性能之间找到平衡点。
  • 事务的长短和事务间的互相影响取决于事务的并行执行情况。

如何理解隔离性2 -

数据库并发场景

  1. 读-读:不存在问题,不需要并发控制。
  2. 读-写:存在线程安全问题,可能导致脏读、幻读、不可重复读。
  3. 写-写:存在线程安全问题,可能导致更新丢失。

MVCC(多版本并发控制)

MVCC 用于解决读-写冲突,通过为事务分配单向增长的事务ID,保存每个修改的版本,版本与事务ID关联,读操作只读事务开始前的数据库快照。

MVCC 解决的问题

  • 提高数据库并发读写性能。
  • 解决脏读、幻读、不可重复读等事务隔离问题。
  • 不解决更新丢失问题。

MVCC 的前提知识

  1. 3个记录隐藏字段

    • DB_TRX_ID:最近修改事务ID。
    • DB_ROLL_PTR:回滚指针,指向上一个版本。
    • DB_ROW_ID:隐含的自增ID(隐藏主键)。
  2. undo日志:保存数据的历史版本。

  3. Read View:事务进行快照读时产生的读视图,记录当前活跃事务的ID。

MVCC 执行流程

  1. 事务修改数据前,将当前数据拷贝到undo log中。
  2. 修改数据,更新DB_TRX_ID为当前事务ID,DB_ROLL_PTR指向undo log中的副本数据。
  3. 事务提交后,释放锁。

Read View 与 MVCC

Read View用于判断事务能看到数据的哪个版本。它记录了事务执行快照读时的活跃事务ID,并用这些信息来决定数据的可见性。

隔离级别与 MVCC

  • READ-COMMITTED:每个DML语句都可能创建一个新的Read View。
  • REPEATABLE-READ:事务的第一个快照读创建一个Read View,后续读取使用同一个Read View。

快照读与当前读

  • 快照读:读取历史版本,不受加锁限制,提高并行执行效率。
  • 当前读:读取最新版本,需要加锁。

隔离级别的影响

不同的隔离级别决定了select操作是快照读还是当前读,从而影响事务看到的数据版本。

总结

  • MVCC通过维护数据的多个版本来支持并发控制。
  • Read View是MVCC中用于可见性判断的关键机制。
  • 隔离级别决定了事务如何看到数据版本,影响数据库的并发性能和一致性。

多版本并发控制(MVCC)是如何工作的?

多版本并发控制(MVCC)是一种用于管理并发访问数据库的技术,它允许在读操作时不需要加锁,从而提高了数据库的并发性能。MVCC主要在支持事务的数据库系统中实现,如MySQL的InnoDB存储引擎。以下是MVCC工作的基本流程:

  1. 隐式字段
    InnoDB中的每行数据都有三个特殊的隐藏字段:

DB_TRX_ID:记录最后修改该行的事务ID。
DB_ROLL_PTR:回滚指针,指向该行的undo日志链。
DB_ROW_ID:行的唯一标识符。

  1. Undo日志
    Undo日志记录了数据的历史版本,包括插入(insert)和更新/删除(update/delete)操作。当事务对数据进行修改时,它会将修改前的数据版本存储在undo日志中。这些日志以链表的形式存储,每个节点代表一个历史版本。

  2. Read View
    Read View是MVCC中用于可见性判断的数据结构。当一个事务进行快照读操作时,InnoDB会创建一个Read View,它包含了以下内容:

m_low_limit_id:高于这个ID的事务修改对当前事务不可见。
m_up_limit_id:低于这个ID的事务修改对当前事务可见。
m_creator_trx_id:创建该Read View的事务ID。
m_ids:在Read View创建时活跃的其他事务ID列表。

  1. 快照读与当前读
    快照读(Snapshot Read):读取数据的历史版本,通常用于普通的SELECT查询。InnoDB会根据Read View来判断数据的可见性,选择适当的历史版本返回给用户。
    当前读(Current Read):读取数据的最新版本,通常用于INSERT、UPDATE、DELETE和SELECT … FOR UPDATE/SHARE MODE查询。当前读需要获取相应的锁,以确保数据的一致性。
  2. 可见性算法
    当事务进行快照读时,InnoDB会使用Read View来确定哪些数据版本对当前事务可见。基本算法如下:

比较行的DB_TRX_ID与Read View的m_low_limit_id和m_up_limit_id。
如果DB_TRX_ID小于m_up_limit_id且不在m_ids列表中,则该行可见。
如果DB_TRX_ID大于或等于m_low_limit_id,则该行不可见,需要通过DB_ROLL_PTR回滚指针查找之前的版本。

  1. 写操作和Next-Key锁
    在写操作(如INSERT、UPDATE、DELETE)时,InnoDB会使用Next-Key锁来保证事务的隔离性。Next-Key锁是行锁和间隙锁(GAP锁)的组合,它锁定一个数据行,并锁定该行所在范围的间隙,以防止其他事务插入或修改数据。

  2. 幻读的解决
    在可重复读(REPEATABLE READ)隔离级别下,MVCC结合Next-Key锁解决了幻读问题。即使在事务中多次执行相同的查询,由于MVCC保证了读取的历史版本一致,所以不会出现幻读。

通过这种方式,MVCC允许数据库在保持数据一致性的同时,提高并发读取的能力,减少了锁争用,从而提高了数据库的整体性能。

相关文章:

〔 MySQL 〕事务管理

事务代码目录 1. 设置事务隔离级别 2. 开启事务 3. CRUD操作 3.1 创建(Create) 3.2 读取(Read) 3.3 更新(Update) 3.4 删除(Delete) 4. 提交或回滚事务 5. 示例&#xff1a…...

centOS定时任务-cron服务

最近在训练模型的过程中,经常会因为内存爆炸而停止模型训练过程,而且因为内存占满停止的训练进程甚至都没有任何的报错提示。 1、需要减少num_worker的数量,降低需要占用内存的数据数量 2、可以通过free -h监控内存的占用情况 3、可以通过lin…...

ubuntu22.04.5本地apt源部署

很多情况下,内网服务器无法连接互联网,这样如果原始系统只是最基本的下载安装包,因为存在依赖包不全的情况,难以对其进行更新及通过apt安装包 所以为解决不能联网的问题,首先先通过可以联网的机器制造好源,…...

CSS 实现带tooltip的slider

现代 CSS 强大的令人难以置信 这次我们来用 CSS 实现一个全功能的滑动输入器,也就是各大组件库都有的slider,效果如下 还可以改变一下样式,像这样 特别是在拖动时,tooltip还能跟随拖动的方向和速度呈现不同的倾斜角度&#xff0c…...

【LeetCode每日一题】——220.存在重复元素 III

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时空频度】九【代码实现】十【提交结果】 一【题目类别】 数组 二【题目难度】 困难 三【题目编号】 220.存在重复元素 III 四【题目描述】 给你一个…...

Git命令

目录 一、创建版本库 二、pwd 命令是用于显示当前的目录 三、通过命令 git init 把这个目录变成git可以管理的仓库 四、ll 五、添加文件和修改提交文件 1.创建文件test.txt --- 此刻文件在工作区(WorkSpace) 2.使用命令 git add test.txt添加到暂…...

2024第十六届蓝桥杯模拟赛(第二期)-Python

# 2024第十六届蓝桥杯模拟赛&#xff08;第二期&#xff09;-Python题解 # 自己改注释# -----------------------1------------------------ # def prime(x): # if x < 2: # return 0 # for i in range(2, int(x ** 0.5) 1): # if x % i 0: # …...

数据结构:Win32 API详解

目录 一.Win32 API的介绍 二.控制台程序(Console)与COORD 1..控制台程序(Console): 2.控制台窗口坐标COORD&#xff1a; 3.GetStdHandle函数&#xff1a; &#xff08;1&#xff09;语法&#xff1a; &#xff08;2&#xff09;参数&#xff1a; 4.GetConsoleCursorInf…...

Hive-4.0.1数据库搭建(可选配置用户名密码远程连接,涵盖切换为tez引擎)

一、hive搭建&#xff08;所依赖的Hadoop集群参照文章&#xff1a;最新版hadoop-3.4.0集群安装和配置&#xff08;目前论坛的都是老古董了&#xff0c;看我的准没错&#xff01;&#xff01;&#xff01;&#xff09;这里以三台服务器为例_hadoop 3.4安装-CSDN博客&#xff09;…...

【从零开始入门unity游戏开发之——C#篇13】命名规范——驼峰命名法和帕斯卡命名法,函数(方法)的使用介绍

文章目录 一、命名规范1、**驼峰命名法&#xff08;Camel Case&#xff09;**用途&#xff1a; 2、**帕斯卡命名法&#xff08;Pascal Case&#xff09;**用途&#xff1a; 3、**C# 中命名约定的最佳实践**3.1 **类、结构体、接口、枚举、委托**3.2 **方法、属性、事件**3.3 **…...

Android 写排行榜,顶部前三

activity_step_rank.xml <?xml version"1.0" encoding"UTF-8"?> <FrameLayout android:layout_height"match_parent" android:layout_width"match_parent" android:id"id/fragment_parent" android:orientation…...

sql server一些冷知识

1. Sql Server冷知识 &#xff08;1&#xff09; 删除表内容的方法 truncate table 表名 &#xff08;清除表记录&#xff0c;这个快&#xff09; &#xff08;2&#xff09; 列出所有数据库 sp_redatabases &#xff08;3&#xff09; 存储过程的参数命名 参数一定要以开头&am…...

【功能安全】随机硬件失效导致违背安全目标的评估(FMEDA)

目录 01 随机硬件失效介绍 02 FMEDA介绍 03 FMEDA模板 01 随机硬件失效介绍 GBT 34590 part5...

【Qt】信号、槽

目录 一、信号和槽的基本概念 二、connect函数&#xff1a;关联信号和槽 例子&#xff1a; 三、自定义信号和槽 1.自定义槽函数 2.自定义信号函数 例子&#xff1a; 四、带参的信号和槽 例子&#xff1a; 五、Q_OBJECT宏 六、断开信号和槽的连接 例子&#xff1a; …...

二叉树、平衡二叉树、红黑树、BTree、B+Tree的区别

一、二叉查找树 二叉树具有以下性质&#xff1a;左子树的键值小于根的键值&#xff0c;右子树的键值大于根的键值。 如下图所示就是一棵二叉查找树&#xff0c; 对该二叉树的节点进行查找发现深度为1的节点的查找次数为1&#xff0c;深度为2的查找次数为2&#xff0c;深度为n…...

【Rust自学】3.1. 变量与可变性

3.1.0. 写在正文之前 欢迎来到Rust自学的第三章&#xff0c;一共有6个小节&#xff0c;分别是: 变量与可变性&#xff08;本文&#xff09;数据类型&#xff1a;标量类型数据类型&#xff1a;复合类型函数和注释控制流&#xff1a;if else控制流&#xff1a;循环 通过第二章…...

如何使用生成式AI实现跨领域内容生成

文章目录 引言生成式AI的基本概念定义与分类技术发展现状 跨领域内容生成的技术实现数据准备模型选择与设计训练策略 应用案例分析教育培训新闻媒体文化创意产业 实践建议确定明确的目标构建合适的团队持续迭代改进遵守法律法规 结论 引言 在当今数字化时代&#xff0c;信息的…...

ubuntu无网络图标无法上网解决方案

1.打开/etc/resolv.conf&#xff0c;在其中添加需要配置的DNS地址&#xff0c;根据自己的电脑情况配置IP和网关 # interfaces(5) file used by ifup(8) and ifdown(8) auto lo iface lo inet loopback#网卡2&#xff0c;双网卡的话eth0、eth1 auto eth1 iface eth1 inet stat…...

手写Redis分布式锁+RedisUtil二次封装

文章目录 1.手写Redis分布式锁1.RedisShareLockUtil2.使用方式 2.RedisUtil二次封装1.RedisUtil2.使用案例 1.手写Redis分布式锁 1.RedisShareLockUtil package com.sunxiansheng.redis.util;import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springfra…...

APP测试中ios和androis的区别,有哪些注意点

一、运行机制不同 IOS采用的是沙盒运行机制&#xff0c;安卓采用的是虚拟机运行机制。 1、沙盒机制&#xff1a; 概念&#xff1a;沙盒是一种安全机制&#xff0c;用于防止不同应用之间互相访问 作用&#xff1a;就是存储数据&#xff0c;每个沙盒就相当于每个每个应用的系…...

Qt编译MySQL数据库驱动

目录 Qt编译MySQL数据库驱动 测试程序 Qt编译MySQL数据库驱动 &#xff08;1&#xff09;先找到MySQL安装路径以及Qt安装路径 C:\Program Files\MySQL\MySQL Server 8.0 D:\qt\5.12.12 &#xff08;2&#xff09;在D:\qt\5.12.12\Src\qtbase\src\plugins\sqldrivers\mysql下…...

Springboot中使用Retrofit

Retrofit官网 https://square.github.io/retrofit/ 配置gradle implementation("com.squareup.okhttp3:okhttp:4.12.0")implementation ("com.squareup.retrofit2:retrofit:2.11.0")implementation ("com.squareup.retrofit2:converter-gson:2.11.0…...

字体子集化实践探索

最近项目rust生成PDF组件printpdf需要内嵌完整字体导致生成的PDF很大&#xff0c;需要做压缩&#xff0c;但是rust的类库allsorts::subset::subset不支持windows&#xff0c;所以做了一些windows下字体子集化的尝试 方案一&#xff1a;node.js做子集化 fontmin 缺点是也需要集…...

统计一个目录下的文件及目录数量-linux010

要统计一个目录下的文件数量&#xff08;包括子目录中的文件&#xff09;&#xff0c;可以使用以下命令&#xff1a; 1. 统计所有文件数量&#xff08;包括子目录&#xff09; 在终端中运行以下命令&#xff1a; find /path/to/directory -type f | wc -l 解释&#xff1a;…...

【计算机网络】期末考试预习复习|上

作业讲解 物理层作业 共有4个用户进行CDMA通信。这4个用户的码片序列为&#xff1a; A: (–1 –1 –1 1 1 –1 1 1)&#xff1b;B: (–1 –1 1 –1 1 1 1 –1) C: (–1 1 –1 1 1 1 –1 –1)&#xff1b;D: (–1 1 –1 –1 –1 –1 1 –1) 现收到码片序列&#xff1a;(–1 1 –…...

构建一个rust生产应用读书笔记四(实战3)

从这一节开始&#xff0c;我们将继续完善邮件订阅生产级应用&#xff0c;根据作者的选型sqlx作为数据库操作的类库&#xff0c;它有如下优点&#xff1a; 它旨在提供高效、安全且易于使用的数据库交互体验。sqlx 支持多种数据库&#xff0c;包括 PostgreSQL、MySQL 和 SQLite&…...

idea无法识别文件,如何把floder文件恢复成model

前景&#xff1a; 昨天&#xff0c;我在之前的A1214模块包下新增了一个demo类&#xff0c;然后又新建了一个A1216模块&#xff0c;写了算法题&#xff0c;后面打算用git提交&#xff0c;发现之前的A1214模块下的demo类和新建的模块源文件都已经被追踪了&#xff0c;都是绿色的&…...

更新数据时Redis的操作

一般做法是在数据库更新后删除Redis中对应的缓存数据&#xff0c;而非更新数据。那么为什么要这么做呢&#xff1f; 以下是一些拙见 场景使用 金融交易系统&#xff1a;在金融领域&#xff0c;数据的准确性至关重要。任何数据不一致都可能导致严重的财务损失。因此&#xff0…...

Flink CDC 读取oracle库数据性能优化

通过综合考虑Oracle数据库配置、Flink作业配置以及其他优化措施&#xff0c;可以显著提升Flink CDC读取Oracle库数据的性能和效率。可以从以下几个方面进行&#xff1a; 一、Oracle数据库配置优化 ‌开启归档日志‌&#xff1a; 通过执行sqlplus /assysdba或sqlplus/nolog命令…...

学习记录:js算法(一百二十三):不同路径 II

文章目录 不同路径 II思路一 不同路径 II 给定一个 m x n 的整数数组 grid。一个机器人初始位于 左上角&#xff08;即 grid[0][0]&#xff09;。机器人尝试移动到 右下角&#xff08;即 grid[m - 1][n - 1]&#xff09;。机器人每次只能向下或者向右移动一步。 网格中的障碍物…...

mybatis 的动态sql 和缓存

动态SQL 可以根据具体的参数条件&#xff0c;来对SQL语句进行动态拼接。 比如在以前的开发中&#xff0c;由于不确定查询参数是否存在&#xff0c;许多人会使用类似于where 1 1 来作为前缀&#xff0c;然后后面用AND 拼接要查询的参数&#xff0c;这样&#xff0c;就算要查询…...

You need to call SQLitePCL.raw.SetProvider()

在.NET环境中使用Entity Framework Core&#xff08;EF Core&#xff09;连接SQLite数据库时&#xff0c;报错。 使用框架 .NET8 错误信息&#xff1a; Exception: You need to call SQLitePCL.raw.SetProvider(). If you are using a bundle package, this is done by calling…...

MYSQL执行一条update语句,期间发生了什么

客户端先通过连接器建立连接&#xff0c;连接器自会判断用户身份&#xff1b; 因为这是一条 update 语句&#xff0c;所以不需要经过查询缓存&#xff0c;但是表上有更新语句&#xff0c;是会把整个表的查询缓存清空的&#xff0c;所以说查询缓存很鸡肋&#xff0c;在 MySQL 8…...

《安全工程师自我防护指南:直面数字威胁的有效策略与实践》

一、法律层面的保护 获取授权 在对目标系统进行任何测试之前&#xff0c;确保已经获得了合法的授权。这可以是来自目标组织&#xff08;如企业的信息安全部门&#xff09;的书面授权或者合同协议。例如&#xff0c;一家公司聘请外部安全团队来测试其网络安全防御能力&#xff…...

SpringBoot2+Vue2开发工作管理系统

项目介绍 在工作中使用的管理系统&#xff0c;可以随手记录一些笔记、可以汇总一些常用网站的链接、可以管理自己负责的项目、可以记录每日日报和查看历史日报、可以记录加班情况、可以记录报销内容、可以编写文章文档。 系统功能 我的笔记快捷入口项目管理今日日报我的日报…...

华为HarmonyOS实现跨多个子系统融合的场景化服务 -- 7 地图选点Button

场景介绍 本章节将向您介绍如何使用地图选点Button功能&#xff0c;开发者可调用Button组件拉起Map Kit的地图选点页面&#xff0c;用户在地图中选择位置后&#xff0c;位置相关信息返回Button界面。 说明 该场景暂不支持2in1设备。 前提条件 参见开发准备。 效果图展示 …...

Web项目图片视频加载缓慢/首屏加载白屏

Web项目图片视频加载缓慢/首屏加载白屏 文章目录 Web项目图片视频加载缓慢/首屏加载白屏一、原因二、 解决方案2.1、 图片和视频的优化2.1.1、压缩图片或视频2.1.2、 选择合适的图片或视频格式2.1.3、 使用图片或视频 CDN 加速2.1.4、Nginx中开启gzip 三、压缩工具推荐 一、原因…...

Java系统对接企业微信审批项目流程

若依做的一个系统需求需要对接企业微信的人员去审核订单 回款之类&#xff0c;以下是详细步骤. 1.首先登入企业微信管理后台&#xff1a; 企业微信 2.找到应用管理 3.自建一个应用 4.这些数据都可以拿到 5.配置可信Ip 6.进入有两种方法让你去配置 &#xff0c;第一种用公司的…...

MacOS 命令行详解使用教程

本章讲述MacOs命令行详解的使用教程&#xff0c;感谢大家观看。 本人博客:如烟花般绚烂却又稍纵即逝的主页 MacOs命令行前言&#xff1a; 在 macOS 上,Terminal&#xff08;终端) 是一个功能强大的工具&#xff0c;它允许用户通过命令行直接与系统交互。本教程将详细介绍 macOS…...

易语言鼠标轨迹算法(游戏防检测算法)

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序&#xff0c;它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言&#xff0c;原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势&#xff1a; 模拟…...

java-使用druid sqlparser将SQL DDL脚本转化为自定义的java对象

java-使用druid sqlparser将SQL DDL脚本转化为自定义的java对象 一、引言二、环境三、待解析的DDL四、解析后的对象结构五、完整的UT类六、控制台输出总结 一、引言 在日常开发中&#xff0c;有些需要对SQL进行解析的场景&#xff0c;比如读取表结构信息&#xff0c;生成文档、…...

靜態IP與DHCP的區別和用法

IP地址可以是靜態的&#xff0c;即固定不變&#xff0c;也可以是動態的&#xff0c;定期更改或每次連接後更改。 什麼是靜態 IP&#xff1f; 靜態IP地址是固定的&#xff0c;手動分配的IP地址&#xff0c;不會隨時間而變化。分配後&#xff0c;此 IP 保持不變&#xff0c;並由…...

【C#】Debug和Release的区别和使用

在 C 或 C# 开发中&#xff0c;Debug 和 Release 是两种不同的编译配置&#xff0c;主要用于开发过程中的不同阶段。它们的主要区别如下&#xff1a; 1. Debug 版本 Debug 版本是为了开发和调试程序而优化的构建模式。 特点&#xff1a; 包含调试信息&#xff1a; Debug 版本…...

Element plus 下拉框组件选中一个选项后显示的是 value 而不是 label

最近刚进行 Vue3 Element plus 项目实践&#xff0c;在进行表单二次封装的时候&#xff0c;表单元素 select 下拉框组件选中一个选项后显示的是 value 而不是 label&#xff0c;下面上代码&#xff1a; 原来的写法&#xff1a; <el-selectv-if"v.type select"…...

Redis - 消息队列 Stream

一、概述 消息队列 定义 消息队列模型&#xff1a;一种分布式系统中的消息传递方案&#xff0c;由消息队列、生产者和消费者组成消息队列&#xff1a;负责存储和管理消息的中间件&#xff0c;也称为消息代理&#xff08;Message Broker&#xff09;生产者&#xff1a;负责 产…...

【多维DP】【hard】力扣1269. 停在原地的方案数

有一个长度为 arrLen 的数组&#xff0c;开始有一个指针在索引 0 处。 每一步操作中&#xff0c;你可以将指针向左或向右移动 1 步&#xff0c;或者停在原地&#xff08;指针不能被移动到数组范围外&#xff09;。 给你两个整数 steps 和 arrLen &#xff0c;请你计算并返回&…...

Android显示系统(11)- 向SurfaceFlinger申请Surface

Android显示系统&#xff08;01&#xff09;- 架构分析 Android显示系统&#xff08;02&#xff09;- OpenGL ES - 概述 Android显示系统&#xff08;03&#xff09;- OpenGL ES - GLSurfaceView的使用 Android显示系统&#xff08;04&#xff09;- OpenGL ES - Shader绘制三角…...

OpenCV实验篇:识别图片颜色并绘制轮廓

第三篇&#xff1a;识别图片颜色并绘制轮廓 1. 实验原理 颜色识别的原理&#xff1a; 颜色在图像处理中通常使用 HSV 空间来表示。 HSV 空间是基于人类视觉系统的一种颜色模型&#xff0c;其中&#xff1a; H&#xff08;Hue&#xff09;&#xff1a;色调&#xff0c;表示颜色…...

鸿蒙-应用内悬浮窗

//悬浮窗工具类 import { window } from kit.ArkUI; import { BusinessError } from kit.BasicServicesKit; import { Logger } from mbbase/common-ui; import * as FloatedWindowPage from ./FloatedWindowPage; // 导入命名路由页面 const TAG [FloatedWindowUtils]; ex…...

Ubuntu Linux操作系统

一、Ubuntu简介 Ubuntu Linux是由南非人马克沙特尔沃思(Mark Shuttleworth)创办的基于Debian Linux的操作系统&#xff0c;于2004年10月公布。Ubuntu是一个以桌面应用为主的Linux发行版操作系统。Ubuntu拥有庞大的社区力量&#xff0c;用户可以方便地从社区获得帮助。其官方网…...