Mysql(事务)

Mysql(事务)

  1. 简介

    1. 是什么:一组操作的集合,不分割的工作单位,事务会把所有的操作作为一个整体,向数据库发起操作,要么全部失败要么全部成功。

    2. 案例:

      • 银行转账

        1. 查询A的余额
        2. 减少的A的余额,B的账户增加响应的金额,
        3. 错误情况:若A钱减少的时候B发生一个错误,导致B没有收到钱那么问题就会很严重。可以用事务来防止出现上述的错误,把查询A账户,较少A账户,增加B账户位一个事务,作为一个整体。
      • 事务的流程(默认不开启事务,手动开启提交,回滚事务)

        • 开启事务
        • 回滚事务(抛异常时回滚:临时修改的数据复原)
        • 提交事务
  2. 基本操作

    1. 控制事务方式一:

      1. 查看事务的提交方式:select @@autocommit;通过set指令设置系统变量将提交方式改为手动set @@autocommit=0(0为手动,1为自动)

      2. 提交事务

        commit;

      3. 回滚事务

        rollback

    2. 控制事务方式二:

      1. 开启事务:start transaction 或 begin;
      2. 提交事务:commit;
      3. 回滚事务:rollback;
    3. 案例:

    -- 以store数据库为例建表
    use store;
    -- 数据准备
    create table account(id int auto_increment primary key comment '主键ID',name varchar(10) comment '姓名',money int comment '余额'
    ) comment '账户表';-- 插入数据
    insert into account(id, name, money) VALUES (null,'张三',2000),(null,'李四',2000);-- 恢复数据
    update account set money = 2000 where name = '张三' or name = '李四';-- 完成转账正常流程
    select * from account where name = "张三";
    update account set money = money - 1000 where name = "张三";
    update account set money = money + 1000 where name = "李四";-- 模拟转账出现错误的情况
    select * from account where name = "张三";
    update account set money = money - 1000 where name = "张三";
    程序抛出异常...
    update account set money = money + 1000 where name = "李四";-- 解决方法:控制事务(方法1:)
    select @@autocommit;-- 查看事务提交方式
    set @@autocommit = 0; -- 设置为手动提交
    -- 转账操作 (张三给李四转账1000)
    -- 1. 查询张三账户余额
    select * from account where name = '张三';
    -- 2. 将张三账户余额-1000
    update account set money = money - 1000 where name = '张三';
    程序执行报错 ...
    -- 3. 将李四账户余额+1000
    update account set money = money + 1000 where name = '李四';
    -- 提交事务
    commit;
    -- 回滚事务
    rollback ;-- 方式二
    -- 转账操作 (张三给李四转账1000)
    start transaction ;
    -- 1. 查询张三账户余额
    select * from account where name = '张三';
    -- 2. 将张三账户余额-1000
    update account set money = money - 1000 where name = '张三';
    程序执行报错 ...
    -- 3. 将李四账户余额+1000
    update account set money = money + 1000 where name = '李四';
    -- 提交事务
    commit;
    -- 回滚事务
    rollback;
    
  3. 四大特征

    • 原子性:不可分割的最小单位,要么一起成功,要么一起失败。
    • 一致性:事务完成时,必须使所有的数据都保持一致性。
    • 隔离性:隔离机制,保证事务不在外部并发操作受影响。
    • 持久性:事务一旦提交或者回滚,对数据库中的数据改变就是永久的。C:\ProgramData\MySQL\MySQL Server 8.0\Data每一个数据库对应一个文件夹。
  4. 并发事务

    A,B事务同时操作同一张数据库表时引发的问题

    • 脏度:一个事务读取到另一个事务还没有提交的操作。
    • 不可重复度:一个事务先后读取同一条记录,但是两次读取的数据不同。
    • 幻度:一个事务按条件读取事务没有对应数据,但是在插入数据时又发现存在,好像出现了幻影。
  5. 事务隔离级别(解决并发事务的问题)(数据安全度和性能成反比权衡安全和并发性)

    1. 事务隔离级别

      隔离级别脏读不可重复读幻读
      Read uncommited
      Read commited×
      Repeatable Read(默认)××
      Serializable×××
    2. 查看事务隔离级别

      select @@transaction_isolation;

    3. 设置事务隔离级别

      set [session | global] transaction isolation level {read uncommited | read commited | repeatable read | serializable}

    4. 示例

      -- 查看事务隔离级别
      select @@transaction_isolation;-- 设置事务隔离级别
      set session transaction isolation level read uncommitted ;
      set session transaction isolation level repeatable read ;
      

Mysql(基础——增删改查)

概述sql(ddl,dml,dql,dcl),函数(字符串处理,日期处理,数值,流程控制),约束(主键,非空,默认,检查8.0.16,外键),多表查询(1:1,1:n,n:n,外连接,内连接,子查询),事务(四大特性,并发事务引发的问题)

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

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

相关文章

input , change ,blur 事件的区别,以及在vue和react中的表现

原生事件介绍 onInput Event 当一个 , , 或 元素的 value 被修改时,会触发 input 事件 onChange Event 当用户更改 、 和 元素的值时,change 事件在这些元素上触发。和 input 事件不同的是,并不是每次元素的 value 改变时都会触发 change…

SQL 算术运算符

SQL Server中的存储过程 什么是存储过程? 存储过程是一段预先编写好的 SQL 代码,可以保存在数据库中以供反复使用。它允许将一系列 SQL 语句组合成一个逻辑单元,并为其分配一个名称,以便在需要时调用执行。存储过程可以接受参数…

Qt线程池

创建一个类继承自QRunnable&#xff1a; class Thread02 : public QRunnable 重写run方法&#xff1a; void run() override; 在main函数里面加入线程池&#xff1a; Thread02 *th new Thread02();QThreadPool::globalInstance()->start(th); #include <QtCore/QC…

巧妙的使用WPF中的资源

其实&#xff0c;在wpf中&#xff0c;最核心的就是xaml&#xff0c;因为只有xaml&#xff0c;才能体现出用的是wpf&#xff0c;而不是普通的cs文件&#xff0c;cs文件在winform中等等程序都可以使用的&#xff0c;唯独xaml才是wpf中最重要的&#xff0c;最精华的东西&#xff0…

ARM按键中断

do_irq.c 判断中断号 #include "key_it.h" extern void printf(const char *fmt, ...); unsigned int i 0; void do_irq(void) {// 获取中断号&#xff0c;根据中断号的不同进行不同的中断处理int irqno;irqno GICC->IAR & 0x3ff;switch (irqno){case 99:…

gitlab ci pages

参考文章 gitlab pages是什么 一个可以利用gitlab的域名和项目部署自己静态网站的机制 开启 到gitlab的如下页面 通过gitlab.ci部署项目的静态网站 # build ruby 1/3: # stage: build # script: # - echo "ruby1"# build ruby 2/3: # stage: build …

jupyter notebook介绍、安装和使用

简介 Jupyter Notebook是基于网页的用于交互计算的应用程序。其可被应用于全过程计算&#xff1a;开发、文档编写、运行代码和展示结果。——Jupyter Notebook官方介绍 简而言之&#xff0c;Jupyter Notebook是以网页的形式打开&#xff0c;可以在网页页面中直接编写代码和运…

vue3 + ts 判断各种数据类型,首字母转大写,下划转驼峰,的方法集合

vue3 ts 判断各种数据类型&#xff0c;首字母转大写&#xff0c;下划转驼峰&#xff0c;的方法集合(记录ing…) 1. 直接上代码 1. 在utils文件夹下新建 index.ts// index.ts/*** description: 判断是否为某个类型*/ export function is(val: unknown, type: string) {return …

SpringCache入门

1. SpringCache概述 Spring Cache 是 Spring 框架提供的一个用于提高应用性能的缓存抽象。它不是一个具体的缓存实现&#xff0c;而是提供了一组一致的编程模型来整合各种缓存机制&#xff0c;比如 EhCache、Caffeine、Redis 等。Spring Cache 使得开发者可以通过简单的注解来…

Spring Boot+Mybatis设置sql日志打印

在全局配置文件添加以下内容&#xff1a;logging.level.com.demo.mapperdebug&#xff0c;com.demo.mapper&#xff1a;src下的mapper路径&#xff0c;debug&#xff1a;设置日志打印级别为debug&#xff0c;亦可设置为&#xff1a;ERROR、WARN、INFO application.properties …

10-流媒体-RTMP编译

将h264推流给服务器&#xff0c;就完成了采集端的推流工作。一般在嵌入式系统常用的rtmp推流方案是rtmpdump。使用rtmp库涉及到一些编译过程&#xff0c;下面我们一点点描述。 关于rtmp的使用涉及到3个开源库的编译&#xff08;openssl, zlib, rtmpdump&#xff09;&#xff0c…

【C++】optional的使用(一)

这篇文章介绍下C17引入的std::optional 为什么要有 optional 一般来说&#xff0c;如果想要一个函数返回“多个”值&#xff0c;C程序员倾向于使用结构体/类完成这个操作。即定义一个通用的结构体&#xff0c;在函数内部完成装填&#xff0c;然后返回一个实例化的结构体。 #…

fckeditor编辑器改造示例:增加PRE,CODE控件

查看专栏目录 Network 灰鸽宝典专栏主要关注服务器的配置&#xff0c;前后端开发环境的配置&#xff0c;编辑器的配置&#xff0c;网络服务的配置&#xff0c;网络命令的应用与配置&#xff0c;windows常见问题的解决等。 文章目录 修改方法&#xff1a;1&#xff09;修改fckco…

Python项目——贪吃蛇

1、原理 整个界面由一个二维数组组成。游戏开始时&#xff0c;会随机生成一个苹果&#xff08;红点&#xff09;和一条蛇&#xff08;黄点&#xff09;。蛇会在二维数组中移动&#xff0c;当蛇碰到苹果时&#xff0c;苹果被吃&#xff0c;蛇的长度加一&#xff08;红点变黄点&…

性能测试

什么是性能测试&#xff1f;性能测试定义性能测试和功能测试区别性能测试常见术语及指标1&#xff1a;用户数3&#xff1a;响应时间4&#xff1a;事务5&#xff1a;每秒事务通过数6&#xff1a;用户点击率7&#xff1a;吞吐量8&#xff1a;吞吐率9&#xff1a;思考时间10&#…

C++函数返回值类型不确定处理办法-函数重载

如果有一个函数的返回值不确定是int还是float&#xff0c;比如&#xff1a; int func(const int& input) {return(input 1);} float func(const int& input) {return(input 1);} //重定义报错float a func(1); 这样定义肯定是会报错的。因为同名函数的重载只能用…

基于ssm的简单学校课程管理系统的设计与实现(源码+调试)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。今天给大家介绍一篇基于ssm的简单学校课程管…

【Python测试开发】文件上传操作

先写一个上传页面 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>文件上传</title><link href"http://dcn.bootcss/bootstrap/3.3.0/css/bootstrap.min.css" rel"styleshee…

探索Nginx的奥秘--从代理到负载均衡的艺术实践

文章目录 &#x1f33a;Nginx的引入&#x1f33a;&#x1f33a;深刻理解正向代理与反向代理&#x1f33a;&#x1f339;Reverse proxy&#x1f339;&#x1f339;正向代理与反向代理的区别&#x1f339;&#x1f339;反向代理为什么叫反向代理&#x1f339;&#x1f339;负载均…

C#教程(三):字符串的各种用法

在C#中&#xff0c;字符串&#xff08;string 类型&#xff09;是一种常用的数据类型&#xff0c;用于存储和操作文本数据。以下是一些C#中字符串的常见用法 1、输出任意的字符串长度 代码 #region 输出任意的字符串长度 Console.WriteLine("请输入你心中想到的名字&…