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

mySql的事务(操作一下)

目录

  • 1. 简介
  • 2. 事务操作
  • 3. 四大特性
  • 4. 并发事务问题
  • 5. 脏读
  • 6. 不可重复读
  • 7. 幻读
  • 事务隔离级别
  • 参考链接

1. 简介

事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
默认的MySQL的事务是自动提交的,当执行一条DML语句,MySQL会立即隐式的提交事务

2. 事务操作

  • 查看/设置事务提交方式
    SELECT @@autocommit;
    SET @@autocommit = 0;
  • 提交事务
    COMMIT;
  • 回滚事务
    ROLLBACK;
select * from commodity;select @@autocommit;-- 手动提交set @@autocommit = 0;-- 涨价
-- 1. 查询鼠标的价格select price from commodity where name = '鼠标';-- 2. 修改update commodity set price = price + 100 where name = '鼠标';update commodity set price = price + 100 where name = 'U盘';commit;-- 回滚事务rollback;
  • 开始事务
    START TRANSACTION 或 BEFIN;
  • 提交事务
    COMMIT;
  • 回滚事务
    ROLLBACK;

3. 四大特性

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

4. 并发事务问题

脏读:一个事务读到另外一个事务还没有提交的数据
不可重复读:一个事务先后读取一条记录,但两次读取的数据不同,称之为不可重复读
幻读:一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了“幻影”。

5. 脏读

设置事务隔离级别
set session transaction isolation leel read uncommitted;
设置事务隔离级别
开启事务
start transaction;
开启事务
修改aaa的money(尚未提交),然而事务A却变化了
在这里插入图片描述
回滚后,跟着变化
在这里插入图片描述
修改事务的隔离级别,同时开启事务
set session transaction isolation level read committed;
在这里插入图片描述
不再改变,可以解决脏读!!!
在这里插入图片描述

6. 不可重复读

不提交之前进行读取,提交后进行读取
同一个事务,结果却不一样!!!
在这里插入图片描述
在这里插入图片描述
把隔离级别再升一级
set session transaction isolation level repeatable read;
这个时候就不会出现不可重复读!!!

7. 幻读

在这里插入图片描述
在这里插入图片描述
这里存在了,报错!!!
设置隔离级别
set session transaction isolation level serializable;

事务隔离级别

画!表示无法解决
隔离级别

参考链接

无。。。

http://www.lryc.cn/news/374337.html

相关文章:

  • UniApp或微信小程序中scroll-view组件使用show-scrollbar在真机Android或IOS中隐藏不了滚动条的解决办法
  • 每天五分钟深度学习框架pytorch:多维tensor向量在某一维度的拼接和分割
  • 从C语言到C++(五)
  • 数据结构——栈(Stack)详解
  • 1.Element的table表高度自适应vue3+js写法
  • 联想电脑电池只能充到80%,就不在充电了,猛一看以为坏了,只是设置了养护模式。
  • Unity接入PS5手柄和Xbox手柄以及Android平台的(以及不同平台分析)
  • vue+java实现简易AI问答组件(基于百度文心大模型)
  • 刷代码随想有感(104):动态规划——01背包问题/二维dp数组
  • Docker-Portainer可视化管理工具
  • SqlSugar 集成
  • MySQL Connector/C++ 和 MySQL Connector/ODBC 的区别
  • Weevil-Optimizer象鼻虫优化算法的matlab仿真实现
  • Web前端项目-交互式3D魔方【附源码】
  • 视频格式转换avi格式怎么弄?分享视频转换方法
  • UniRx 入门
  • 简单游戏制作——飞行棋
  • 等保一体机
  • 什么是寄存器文件(Register File)?
  • 6月15号作业
  • 零基础入门学用Arduino 第三部分(三)
  • Trusty qemu + android环境搭建详细步骤
  • 杀戮尖塔游戏
  • Kubernetes (K8s) 和 Spring Cloud 的区别
  • 定个小目标之刷LeetCode热题(21)
  • Oracle 打开钱包 ORA-28368: cannot auto-create wallet
  • 【麒麟虚拟机】NetworkManager没有运行
  • vue之一键部署的shell脚本和它的点.bat文件、海螺AI、ChatGPT
  • pg和oracle的区别
  • Docker:在DockerHub上创建私有仓库