5、事务和limit补充

一、事务【都是重点】

1、了解

  • 一个事务其实就是一个完整的业务逻辑

  • 要么同时发生,要么同时结束

  • 是一个最小的工作单元

  • 不可再分

看这个视频,黑马的,4分钟多点就能理解到

可以理解成:

开始事务-----如果中间抛出异常,进行回滚事务---->提交事务

2、事务的四大特性(ACID)

  • 1、原子性:事务是不可分割的最小操作单元,要么全部成功,要么全部失败。

  • 2、一致性:事务完成时,必须使所有的数据都保持一致状态。

    • 当转账操作完成时,所有账户的总金额应该保持不变,此时数据处于一致性状态;如果总金额发生了改变,说明数据处于非一致性状态。
  • 3、隔离性:数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。

    • 比如张三和李四同时都在进行转账操作,但彼此都不影响对方。
  • 4、持久性:事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。

3、事务的操作

  • 创建账户表
CREATE TABLE account(id INT primary key AUTO_INCREMENT comment "主键",name VARCHAR(10) COMMENT "姓名",money INT COMMENT "余额"
)COMMENT "账户表";
INSERT INTO account VALUES(null,"张三",2000),(null,"李四",2000);

3.1、查看/设置事务的提交方式
SELECT @@autocommit;
SET @@autocommit = 0;--设置为0是手动提交,1是自动提交		
3.2、提交事务
COMMIT;
3.3、回滚事务
ROLLBACK;
3.4、事务的举例
CREATE TABLE account(id INT primary key AUTO_INCREMENT comment "主键",name VARCHAR(10) COMMENT "姓名",money INT COMMENT "余额"
)COMMENT "账户表";
INSERT INTO account VALUES(null,"张三",2000),(null,"李四",2000);SELECT @@autocommit;
set @@autocommit=0;--设置为手动提交-- 转账操作(张三给李四1000)
--1、张三的余额是多少
SELECT * FROM ACCOUNT WHERE name = "张三";
--2、将张三的余额减1000
UPDATE account SET money=money-1000 WHERE name = "张三";
lsdfjlsd
--3、将李四的余额加1000
UPDATE account SET money= money+1000 WHERE name = "李四";--提交事务
COMMIT;--回滚事务
ROLLBACK;--恢复数据
UPDATE account SET money = 2000 WHERE name = "张三" or name = '李四';
START TRANSACTION;      -- 或 BEGIN
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;                -- 提交事务(持久化)
-- 或 ROLLBACK;        -- 回滚事务(撤销所有操作)

4、并发事务问题

  1. 脏读(Dirty Read)
    • 一个事务读取了另一个事务未提交的更改数据。
    • 如果第二个事务回滚,那么第一个事务读取的数据将是无效的。
  2. 不可重复读(Non-repeatable Read)
    • 在同一事务中,多次读取同一数据集合,但读取的结果不同。
    • 这通常是由于其他事务在两次读取之间更改了数据。
  3. 幻读(Phantom Read)
    • 同一事务内,多次执行相同条件的查询时,由于其他事务的插入操作,导致前后查询结果行数不一致(出现了"幻影行")。
    • 这通常是由于其他事务插入或删除了数据。

5、事务隔离级别

  • 读未提交:允许一个事务可以看到其他事务未提交的修改。
  • 读已提交:允许一个事务只能看到其他事务已经提交的修改,未提交的修改是不可见的。
  • 可重复读:确保如果在一个事务中执行两次相同的 SELECT 语句,都能得到相同的结果,不管其他事务是否提交这些修改。 (银行总账)
  • 串行化:【序列化】 将一个事务与其他事务完全地隔离

在这里插入图片描述


  • 查看当前事务隔离级别
SELECT @@TRANSACTION_ISOLATION;
  • 设置隔离级别
    • SESSION仅对当前会话有效
    • GLOBAL对所有新创建的会话有效
    • 如果不指定,默认为SESSION
SET [SESSION|GLOBAL] TRANSANCTION ISOLATION LEVEL {READ UNCOMMITTED|READ COMMITTED|REPEATABLE READ |SERIALIZABLE}

  • 脏读
    • 创建2个终端。看黑马视频做的
--在终端1里做一下操作
CREATE TABLE account (id TINYINT(2) AUTO_INCREMENT PRIMARY KEY COMMENT "编号",name VARCHAR(4) NOT NULL COMMENT "姓名",money INT(4) NOT NULL COMMENT "钱")ENGINE = INNODB CHARSET=UTF8 COMMENT = "账户";INSERT INTO account(id,name,money) VALUES(1,"张三",2000),(2,"李四",2000);SELECT * FROM account;
#开始分终端操作
--在终端2
start transaction;
update account set money=money-1000 WHERE name = "张三";
--然后再次回到终端1
SELECT * FROM account;
会发现没有 money - 1000 ;#因为没有提交
--回到终端2,提交事务
COMMIT;
  • 不可重复读取
-- 事务A
BEGIN;
SELECT balance FROM accounts WHERE id = 1; -- 第一次读取,值为1000
-- 此时事务B更新并提交了数据SELECT balance FROM accounts WHERE id = 1; -- 第二次读取,值可能变为900(不可重复读)
COMMIT;
  • 幻读
-- 事务A
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
BEGIN;
SELECT * FROM accounts WHERE balance > 1000; -- 第一次查询返回2条记录-- 事务B在此期间执行并提交:
INSERT INTO accounts(id, balance) VALUES(3, 1500);
COMMIT;SELECT * FROM accounts WHERE balance > 1000; -- 第二次查询仍然返回2条记录
-- 但如果执行:
SELECT COUNT(*) FROM accounts WHERE balance > 1000; -- 可能返回3(幻读)
COMMIT;

二、limit

1、limit startIndex ,length

  • startIndex 是起始下标,也就是展示 [startIndex+1,startIndex+5]

  • length 是长度

-- 按照薪资降序,取出排名在前5名的员工?select ename,salfromemporder by sal desclimit 0,5;

2、limit 数字

  • 是指展示前“数字” 位 。
--按照薪资降序,取出排名在前5名的员工?
select ename,salfromemporder by sal desclimit 5; //取前512点一样。 

3、公式:

  • pageNo:当前页码(通常从1开始)。

  • pageSize:每页显示的记录数。

  • (pageNo - 1) * pageSize 计算的是当前页的第一条记录在所有记录中的位置。

--例如
#pageNo = 3(当前是第三页)
#pageSize = 10(每页显示10条记录)
#起始位置:(3 - 1) * 10 = 20(即从第20条记录开始)
#每页记录数:10
SELECT * FROM your_table
LIMIT 20, 10;

式:

  • pageNo:当前页码(通常从1开始)。

  • pageSize:每页显示的记录数。

  • (pageNo - 1) * pageSize 计算的是当前页的第一条记录在所有记录中的位置。

--例如
#pageNo = 3(当前是第三页)
#pageSize = 10(每页显示10条记录)
#起始位置:(3 - 1) * 10 = 20(即从第20条记录开始)
#每页记录数:10
SELECT * FROM your_table
LIMIT 20, 10;

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

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

相关文章

一套基于 Bootstrap 和 .NET Blazor 的开源企业级组件库

前言 今天大姚给大家分享一套基于 Bootstrap 和 .NET Blazor 的开源企业级组件库:Bootstrap Blazor。 项目介绍 BootstrapBlazor 是一套基于 Bootstrap 和 Blazor 的开源(Apache License)、企业级组件库,无缝整合了 Bootstrap …

mac-M系列芯片安装软件报错:***已损坏,无法打开。推出磁盘问题

因为你安装的软件在Intel 或arm芯片的mac上没有签名导致。 首先打开任何来源操作 在系统设置中配置,如下图: 2. 然后打开终端,输入: sudo spctl --master-disable然后输入电脑锁屏密码 打开了任何来源,还遇到已损坏…

RK3568-鸿蒙5.1与原生固件-扇区对比分析

编译生成的固件目录地址 ../openharmony/out/rk3568/packages/phone/images鸿蒙OS RK3568固件分析 通过查看提供的信息,分析RK3568开发板固件的各个组件及其用途: 主要固件组件 根据终端输出的文件列表,RK3568固件包含以下关键组件&#x…

Java正则表达式:从基础到高级应用全解析

Java正则表达式应用与知识点详解 一、正则表达式基础概念 正则表达式(Regular Expression)是通过特定语法规则描述字符串模式的工具,常用于: 数据格式验证文本搜索与替换字符串分割模式匹配提取 Java通过java.util.regex包提供支持,核心类…

进程间通信--信号量【Linux操作系统】

文章目录 并发编程相关基础概念信号量深刻理解信号量使用共享资源的方式分块使用共享资源的方式会出现的问题举例子理解信号量的第二个特性---预定信号量要成为计数器面临的问题 信号量相关操作接口--POSIX库函数:sem_init库函数:sem_destroy库函数&…

谢赛宁团队提出 BLIP3-o:融合自回归与扩散模型的统一多模态架构,开创CLIP特征驱动的图像理解与生成新范式

BLIP3-o 是一个统一的多模态模型,它将自回归模型的推理和指令遵循优势与扩散模型的生成能力相结合。与之前扩散 VAE 特征或原始像素的研究不同,BLIP3-o 扩散了语义丰富的CLIP 图像特征,从而为图像理解和生成构建了强大而高效的架构。 此外还…

HarmonyOs开发之——— ArkWeb 实战指南

HarmonyOs开发之——— ArkWeb 实战指南 谢谢关注!! 前言:上一篇文章主要介绍HarmonyOs开发之———合理使用动画与转场:CSDN 博客链接 一、ArkWeb 组件基础与生命周期管理 1.1 Web 组件核心能力概述 ArkWeb 的Web组件支持加载本地或在线网页,提供完整的生命周期回调体…

黑马程序员C++2024版笔记 第0章 C++入门

1.C代码的基础结构 以hello_world代码为例&#xff1a; 预处理指令 #include<iostream> using namespace std; 代码前2行是预处理指令&#xff0c;即代码编译前的准备工作。&#xff08;编译是将源代码转化为可执行程序.exe文件的过程&#xff09; 主函数 主函数是…

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(22):复习

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(22):复习 1、前言(1)情况说明(2)工程师的信仰2、知识点(1)复习(2)復習3、单词(1)日语(2)日语片假名单词4、对话练习5、单词辨析记录6、总结1、前言 (1)情况说明 自己在今年,在日本留学中,目前在语言学校,…

Docker配置SRS服务器 ,ffmpeg使用rtmp协议推流+vlc拉流

目录 演示视频 前期配置 Docker配置 ffmpeg配置 vlc配置 下载并运行 SRS 服务 推拉流流程实现 演示视频 2025-05-18 21-48-01 前期配置 Docker配置 运行 SRS 建议使用 Docker 配置 Docker 请移步&#xff1a; 一篇就够&#xff01;Windows上Docker Desktop安装 汉化完整指…

Redis——缓存雪崩、击穿、穿透

缓存雪崩 大量缓存数据在同一时间过期或者Redis故障宕机时&#xff0c;若此时有大量请求&#xff0c;都会直接访问到数据库&#xff0c;导致数据库压力倍增甚至宕机。 大量数据同时过期解决方案&#xff1a; 1、均匀设置过期时间&#xff1a; 设置过期时间的时候可以追加一…

开源GPU架构RISC-V VCIX的深度学习潜力测试:从RTL仿真到MNIST实战

点击 “AladdinEdu&#xff0c;同学们用得起的【H卡】算力平台”&#xff0c;H卡级别算力&#xff0c;按量计费&#xff0c;灵活弹性&#xff0c;顶级配置&#xff0c;学生专属优惠。 一、开篇&#xff1a;AI芯片架构演变的三重挑战 &#xff08;引述TPUv4采用RISC-V的行业案…

字符串相乘(43)

43. 字符串相乘 - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a; class Solution { public:string multiply(string num1, string num2) {string res "0";for (int i 0; i < num2.size(); i) {string str multiplyOneNum(num1, num2[num2.size() -…

mathematics-2024《Graph Convolutional Network for Image Restoration: A Survey》

推荐深蓝学院的《深度神经网络加速&#xff1a;cuDNN 与 TensorRT》&#xff0c;课程面向就业&#xff0c;细致讲解CUDA运算的理论支撑与实践&#xff0c;学完可以系统化掌握CUDA基础编程知识以及TensorRT实战&#xff0c;并且能够利用GPU开发高性能、高并发的软件系统&#xf…

[LevelDB]LevelDB版本管理的黑魔法-为什么能在不锁表的情况下管理数据?

文章摘要 LevelDB的日志管理系统是怎么通过双链表来进行数据管理为什么LevelDB能够在不锁表的情况下进行日志新增 适用人群: 对版本管理机制有开发诉求&#xff0c;并且希望参考LevelDB的版本开发机制。数据库相关从业者的专业人士。计算机狂热爱好者&#xff0c;对计算机的…

【C++进阶篇】C++容器完全指南:掌握set和map的使用,提升编码效率

C容器的实践与应用&#xff1a;轻松掌握set、map与multimap的区别与用法 一. 序列式容器与关联式容器1.1 序列式容器 (Sequential Containers)1.2 关联式容器 (Associative Containers) 二. set系列使用2.1 set的构造和迭代器2.2 set的增删查2.2.1 插入2.2.2 查找2.2.3 删除 2.…

2_Spring【IOC容器中获取组件Bean】

Spring中IOC容器中获取组件Bean 实体类 //接口 public interface TestDemo {public void doSomething(); } // 实现类 public class HappyComponent implements TestDemo {public void doSomething() {System.out.println("HappyComponent is doing something...")…

安卓开饭-ScrollView内嵌套了多个RecyclerView,只想与其中一个RecyclerView有联动

在 Android 开发中&#xff0c;将 RecyclerView 嵌套在 ScrollView 内通常会导致性能问题和滚动冲突&#xff0c;应尽量避免这种设计。以下是原因和替代方案&#xff1a; 为什么不推荐 RecyclerView ScrollView&#xff1f;​​ 性能损耗​ RecyclerView 本身已自带高效回收复…

HTTP 请求中 Content-Type 头部

HTTP 请求中 Content-Type 头部可以设置的各种不同的传输格式。multipart/form-data 只是其中一种,主要用于传输包含文件的数据。 以下是一些常见的 HTTP 请求体的 Content-Type 及其用途: 常见的数据传输格式 (Content-Type) 列表: application/json: 描述: 用于传输 JSO…

【U-boot 命令使用】

文章目录 1 查询有哪些命令2 信息查询命令dbinfo - 查看板子信息printenv- 输出环境变量信息version - 输出uboot版本信息 3 环境变量操作命令修改环境变量新建环境变量删除环境变量 4 内存操作命令md命令nm命令mm命令mv命令cp命令cmp命令 5 网络操作命令与网络有关的环境变量p…