MySQL事务

目录

[1. 概述](#1. 概述)

[2. 四大特征(A,C,I,D)](#2. 四大特征(A,C,I,D))

[3. 事务步骤](#3. 事务步骤)

[4. 隔离性](#4. 隔离性)

[4.1 隔离级别](#4.1 隔离级别)

[4.2 隔离现象](#4.2 隔离现象)

[4.3 查看与设置隔离级别](#4.3 查看与设置隔离级别)


1. 概述

事务(transaction)类似于编程语言中的 方法,包含一组SQL指令。

事务只对 DML ( insert,update,delete 三个关键词的语句 )语句有效;

事务是不可分割的,是最小的工作单元;

事务在数据库中表示一件完整的事情,因此在同一个事物当中,多条DML语句要么同时成功,要么同时失败;

2. 四大特征(A,C,I,D)

原子性(Atomicity):事务是最小的操作单位,其所有操作要么全部成功执行,要么全部失败;

一致性(Consistency):守恒原则,数据执行事务前后的总数是不变的;

隔离性(Isolation):多个用户并发访问同一个数据库时,数据库给每个用户开启的事务,不会被其他事务的操作干扰,即不同的事物之间是不会被影响的;

持久性(Durability):事务一旦被提交,对数据库造成的影响是永久的,即使是数据库系统遇到故障,也不会丢失提交事务的操作;

3. 事务步骤

该指令步骤如下:开启事务,回滚事务,提交事务

开启事务:start transaction 或者 begain

回滚事务:rollback;

提交事务:commit

当然,前面学习 DDL 语句时,每条 DDL 语句是事务默认情况下自动提交的;

如下,是开启事务,提交事务,数据发生持久改变;

如下,开启事务,回滚事务(发生异常会回滚事务),数据没有改变;

没有提交事务之前都不算真正更改数据。

单独执行提交事务:commit,数据才按照事务真正被修改;

4. 隔离性

前面说事务有四个特性,其中隔离性是很重要的一个特性。

4.1 隔离级别

可以把 "隔离" 看作一堵墙,隔开A 事务、B 事务,墙的厚度就是隔离程度;

根据隔离程度的不同,有以下排序(隔离级别越高,效率越低):

隔离级别从低到高排序:读未提交 < 读提交 < 可重复读 < 串行化;

读未提交:隔离级别最低,一般不会用到;

读提交:提交事务后读到的数据;

串行化:多个事务不能并发执行,效率最低,一般不会用到;

oracle 数据库默认的隔离级别是 读提交 ,MySQL 数据库默认的隔离级别是 可重复读

4.2 隔离现象

脏读,不可重复读,幻读是不同隔离级别存在的不同现象

现象的严重性从高到低程度:脏读 > 不可重复读 > 幻读 ;

脏读:读到了另一个事务没有提交的数据;

不可重复读:在一个事务多次重复读取数据,得到的结果是不一样的,这是由于其他事务对数据集进行了修改,导致的结果不一致;

幻读 :在事务执行过程中,前后两次查询得到的结果集不一致;

4.3 查看与设置隔离级别

查看当前会话的隔离级别(对当前事务):select @@transaction_isolation ;

查看全局的隔离级别(对所有事务): select @@local.transaction_isolation ;

设置当前事务的隔离级别:set session transaction isolation level 隔离等级;

设置全局事务的隔离等级:set global transaction isolation level 隔离等级;

相关推荐
全栈前端老曹24 分钟前
【MongoDB】深入研究副本集与高可用性——Replica Set 架构、故障转移、读写分离
前端·javascript·数据库·mongodb·架构·nosql·副本集
R1nG86327 分钟前
CANN资源泄漏检测工具源码深度解读 实战设备内存泄漏排查
数据库·算法·cann
阿钱真强道43 分钟前
12 JetLinks MQTT直连设备事件上报实战(继电器场景)
linux·服务器·网络·数据库·网络协议
逍遥德1 小时前
Sring事务详解之02.如何使用编程式事务?
java·服务器·数据库·后端·sql·spring
笨蛋不要掉眼泪1 小时前
Redis哨兵机制全解析:原理、配置与实战故障转移演示
java·数据库·redis·缓存·bootstrap
Coder_Boy_1 小时前
基于SpringAI的在线考试系统-整体架构优化设计方案
java·数据库·人工智能·spring boot·架构·ddd
fen_fen10 小时前
Oracle建表语句示例
数据库·oracle
砚边数影12 小时前
数据可视化入门:Matplotlib 基础语法与折线图绘制
数据库·信息可视化·matplotlib·数据可视化·kingbase·数据库平替用金仓·金仓数据库
orange_tt12 小时前
Djiango配置Celery
数据库·sqlite
云小逸12 小时前
【nmap源码学习】 Nmap网络扫描工具深度解析:从基础参数到核心扫描逻辑
网络·数据库·学习