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

MySQL事务相关笔记

杂项

InnoDB最大特点:支持事务行锁

MyISAM不支持事务

介绍

一个事务是由一条或者多条对数据库操作的SQL语句所组成的一个不可分割的单元,只有当事务中的所有操作都正常执行完了,整个事务才会被提交给数据库。事务有如下特性:

1.事务的所有SQL语句全部执行成功,才能提交(commit)事务,把结果写回磁盘上。

2.事务执行过程中,有的SQL出现错误,那么事务必须要回滚(rollback)到最初的状态。

ACID特性

  • 事务的原子性(Atomic)
  • 事务的一致性(Consistency)
  • 事务的隔离性(Isolation)

当两个或者多个事务并发执行时,为了保证数据的安全性,将一个事物内部的操作与其它事务的操作隔离起来,不被其它正在执行的事务所看到,使得并发执行的各个事务之间不能互相影响。

  • 事务的持久性(Durability)

事务完成(commit)以后,DBMS保证它对数据库中的数据的修改是永久性的,即使数据库因为故障出错,也应该能够恢复数据!

ACD特性是由mysql的undo log和 redo log 保证;

I特性是由mysql事务 锁机制保证;

mysql中最重要的是日志而不是数据。

事务相关指令

BEGIN; 开启一个事务

COMMIT; 提交一个事务

ROLLBACK; 回滚一个事务到初始的位置

SAVEPOINT point1; 设置一个名字为point1的保存点

ROLLBACK TO point1; 事务回滚到保存点point1,而不是回滚到初始状态

SET TX_ISOLATION='REPEATABLE-READ'; 设置事务的隔离级别

SELECT @@ TX_ISOLATION; 查询事务的隔离级别

实践例子

查看是否设置了自动提交:

在这里插入图片描述

事务并发存在的问题

  • 脏读(Dirty Read):一个事务读取了另一个事务未提交的数据。例如当事务A和事务B并发执行时,当事务A更新后,事务B查询读取到A尚未提交的数据,此时事务A回滚,则事务B读到的数据就是无效的脏数据。(事务B读取了事务A尚未提交的数据)
  • 不可重复读(NonRepeatable Read):一个事务的操作导致另一个事务前后两次读取到不同的数据。例如当事务A和事务B并发执行时,当事务B查询读取数据后,事务A更新操作更改事务B查询到的数据,此时事务B再次去读该数据,发现前后两次读的数据不一样。(事务B读取了事务A已提交的数据)
  • 虚读(Phantom Read)幻读:一个事务的操作导致另一个事务前后两次查询的结果数据量不同。(事务B读取了事务A新增加的数据或者读不到事务A删除的数据)

事务的隔离级别

MySQL支持的四种隔离级别是:

1、READ-UNCOMMITTED未提交读。说明在提交前一个事务可以看到另一个事务的变化。这样读脏数据,不可重复读和虚读都是被允许的。

2、READ-COMMITTED已提交读。说明读取未提交的数据是不允许的。这个级别仍然允许不可重复读和虚读产生。

3、REPEATABLE-READ可重复读。说明事务保证能够再次读取相同的数据而不会失败,但虚读仍然会出现。

4、SERIALIZABLE。串行化。是最高的事务级别,它防止读脏数据,不可重复读和虚读。(它相当于加了读写锁,某个会话读时,其他线程不能写)

在这里插入图片描述

注解

事务隔离级别越高,为避免冲突所花费的性能也就越多,降低并发度。

在“可重复读”级别,实际上可以解决部分的虚读问题,但是不能防止 update 更新产生的虚读问题,要禁止幻读产生,还是需要设置串行化隔离级别。

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

相关文章:

  • 如何利用AI高效率快速调色
  • 数据结构--顺序表的基本操作--插入 and 删除
  • BCSP-玄子Java开发之Java Web编程CH01_初识动态网页
  • 【软件教程】农林生环、水文、海洋、水环境、大气科学、人工智能、碳中和、碳排放、3S、R与统计等软件模型
  • 如何加入开源社
  • 软件开发中的破窗效应
  • 机器视觉初步6-1:基于梯度的图像分割
  • 从0开始,精通Go语言Rest微服务架构和开发
  • Sui x KuCoin Labs夏季黑客松|本周Workshop预告
  • 从电源 LED 读取智能手机的秘密?
  • 【Linux编辑器-vim使用】
  • 安装Apache mysql php
  • 【人工智能】— 神经网络、前向传播、反向传播、梯度下降、局部最小值、多层前馈网络、缓解过拟合的策略
  • 小文智能自定义变量详解
  • 平面电磁波的反射与折射,极化滤波作用
  • 键盘当鼠标用
  • 动态规划part9 | ● 198.打家劫舍 ● 213.打家劫舍II ● 337.打家劫舍III
  • 【k8s系列】一分钟搭建MicroK8s Dashboard
  • ArcEngine二次开发0——入门(下载 部署 组件学习)
  • 人工智能---D分离
  • java spring cloud 企业工程项目管理系统源码-全面的工程项目管理
  • 2023最新软件测试面试题【1000道题含答案】
  • 【目标跟踪】MOT数据集GroundTruth可视化
  • 软件测试的概念与过程----学习软件测试前的思考
  • Streamlit基础教程
  • 内网穿透技术
  • 计算机网络笔记:内部网关协议RIP
  • 基于Java学生信息管理系统设计实现(源码+lw+部署文档+讲解等)
  • PHP简单入门
  • java 客户端操作HDFS