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 隔离等级;

相关推荐
难以触及的高度22 分钟前
mysql中between and怎么用
数据库·mysql
Jacky(易小天)36 分钟前
MongoDB比较查询操作符中英对照表及实例详解
数据库·mongodb·typescript·比较操作符
Karoku0661 小时前
【企业级分布式系统】ELK优化
运维·服务器·数据库·elk·elasticsearch
小技与小术2 小时前
数据库表设计范式
数据库·mysql
安迁岚2 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验三 数据操作
运维·服务器·数据库·sql·mysql
安迁岚3 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验九 触发器
数据库·sql·mysql·oracle·实验报告
Loganer3 小时前
MongoDB分片集群搭建
数据库·mongodb
LKID体3 小时前
Python操作neo4j库py2neo使用之创建和查询(二)
数据库·python·neo4j
刘大浪3 小时前
后端数据增删改查基于Springboot+mybatis mysql 时间根据当时时间自动填充,数据库连接查询不一致,mysql数据库连接不好用
数据库·spring boot·mybatis
一只爱撸猫的程序猿3 小时前
简单实现一个系统升级过程中的数据平滑迁移的场景实例
数据库·spring boot·程序员