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

相关推荐
mmsx2 分钟前
android sqlite 数据库简单封装示例(java)
android·java·数据库
zpjing~.~1 小时前
Mongo 分页判断是否有下一页
数据库
2401_857600951 小时前
技术与教育的融合:构建现代成绩管理系统
数据库·oracle
秋恬意2 小时前
Mybatis能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别
java·数据库·mybatis
潇湘秦2 小时前
一文了解Oracle数据库如何连接(1)
数据库·oracle
雅冰石2 小时前
oracle怎样使用logmnr恢复误删除的数据
数据库·oracle
web前端神器2 小时前
mongodb给不同的库设置不同的密码进行连接
数据库·mongodb
从以前2 小时前
Berlandesk 注册系统算法实现与解析
数据库·oracle
Muko_0x7d22 小时前
Mongodb
数据库·mongodb
Ren_xixi2 小时前
redis和mysql的区别
数据库·redis·mysql