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

相关推荐
RationalDysaniaer4 小时前
了解etcd
数据库·etcd
正在走向自律4 小时前
国产时序数据库选型指南-从大数据视角看透的价值
大数据·数据库·清华大学·时序数据库·iotdb·国产数据库
Pocker_Spades_A4 小时前
Python快速入门专业版(十五):数据类型实战:用户信息录入程序(整合变量、输入与类型转换)
数据库·python
禁默5 小时前
已知 inode 号,如何操作文件?Ext 文件系统增删查改底层逻辑拆解
linux·服务器·数据库
云飞云共享云桌面5 小时前
工厂办公环境如何实现一台服务器多人共享办公
运维·服务器·网络·数据库·3d
weixin_456904275 小时前
MySQL高级特性详解
数据库·mysql
Elastic 中国社区官方博客5 小时前
使用 cloud-native Elasticsearch 与 ECK 运行
大数据·数据库·elasticsearch·搜索引擎·kubernetes·k8s·全文检索
Mr_hwt_1235 小时前
基于MyCat 中间件实现mysql集群读写分离与从库负载均衡教程(详细案例教程)
数据库·mysql·中间件·mysql集群
酷ku的森6 小时前
Redis中的Zset数据类型
数据库·redis·缓存
zhong liu bin6 小时前
MySQL数据库面试题整理
数据结构·数据库·mysql