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

MySQL的事务认识

什么是事务?

事务,就是将一组SQL语句放在同一批次内去执行,如果一个SQL语句出错,则该批次内 的所有SQL都将被取消执行。

事务的ACID原则 (四大原则)

原子性:意味着数据库中的事务执行是作为原子粒度。即不可再分,整个语句要么执行,要么不执行。

一致性:即在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。

隔离性:事务的执行是互不干扰的,一个事务不可能看到其他事务运行时,中间某一时刻的数据。

持久性:意味着在事务完成以后 ,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。

MySQL实现事务的方法步骤
-- 事务的操作
-- 1. 关闭自动提交
set autocommit = 0;
-- 2. 开始事务
start transaction;
-- 3. 一组sql语句
update bank set bmoney = bmoney-1000 where bname='葛二蛋';
update bank set bmoney = bmoney+1000 where bname='王铁牛';
​
-- 4. 结束事务(判断)-- 提交commit;-- 回滚rollback;
-- 5. 开启自动提交
set autocommit = 1;
MySQL中的锁

锁分类:

基于锁的属性分类:共享锁(读锁,S锁),排他锁(写锁,X锁)。

基于锁的粒度分类:表锁,行锁(记录锁,间隙锁,临建锁)

基于锁的状态分类:意向共享锁,意向排他锁。

事务的隔离级别

事务并发问题:

在事务并发执行的时候,如果不进行事务隔离,那么就会产生脏写,脏读,重复读,幻读的问题。

事务的隔离级别:

read_uncommitted读未提交解决问题: 脏写
read_committed读提交解决问题:脏写,脏读
repeatable_read可重复读解决问题:脏写,脏读,不可重复读,幻读(mysql的innodb存在)
serializeable串行化不管读取还是修改所有的事务串行化执行,一个事务的执行必须等其他事务结束
InnoDB的MVCC

MySQL的多版本并发控制(MVCC)是⼀种⽤于实现事务隔离的技术,它允许多个事务在同⼀时刻对同⼀数据进⾏操作⽽不互相阻塞。MVCC通过维护数据的多个版本来实现这⼀点,每个事务看到的数据版本是基于该事务开始时的数据版本。

InnoDB就是通过MVCC机制解决可重复读中的幻读问题。

MVCC的优点

  1. 提高并发性能

  2. 减少锁争用

  3. 简化事务管理

MVCC的缺点

  1. 额外的存储开销

  2. 垃圾回收开销

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 国产游戏技术:迈向全球引领者的征途
  • 构建高效搜索系统 - Faiss向量数据库的快速入门
  • windows C++ 并行编程-并发的异常处理(三)
  • 关于一个早期的计算机网络的理解
  • JAVAEE初阶第二节——多线程基础(上)
  • 数据结构--初步了解(抽象分级)
  • win11快捷键配置
  • 探索 Zed 编辑器:速度与协作的巅峰之作
  • Rainbond 国内最靠谱 docker.rainbond.cc 拉取 dockerhub 容器镜像
  • 中国电力建设集团有限公司 PK 中国能源建设集团有限公司
  • 第七章 用函数实现模块化程序设计
  • 扭矩传感器计量校准常会有哪些问题出现?具体处理办法是什么?
  • 什么软件可以用平板远程控制电脑?
  • PHP一键创建全球参与探索现代在线投票系统
  • 如何通过Spring Cloud Consul增强微服务安全性和可靠性
  • ----------
  • [译]CSS 居中(Center)方法大合集
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • CSS盒模型深入
  • ES6 学习笔记(一)let,const和解构赋值
  • Java反射-动态类加载和重新加载
  • JS笔记四:作用域、变量(函数)提升
  • Just for fun——迅速写完快速排序
  • mysql 5.6 原生Online DDL解析
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • Spring Boot快速入门(一):Hello Spring Boot
  • vue 配置sass、scss全局变量
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 程序员该如何有效的找工作?
  • 机器学习学习笔记一
  • 批量截取pdf文件
  • 如何合理的规划jvm性能调优
  • 跳前端坑前,先看看这个!!
  • 正则与JS中的正则
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ​​​【收录 Hello 算法】9.4 小结
  • ​2021半年盘点,不想你错过的重磅新书
  • # Maven错误Error executing Maven
  • #nginx配置案例
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (12)Linux 常见的三种进程状态
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (汇总)os模块以及shutil模块对文件的操作
  • (力扣)1314.矩阵区域和
  • (力扣)循环队列的实现与详解(C语言)
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (力扣题库)跳跃游戏II(c++)
  • (七)c52学习之旅-中断
  • (全注解开发)学习Spring-MVC的第三天
  • (十五)使用Nexus创建Maven私服