当前位置:网站首页>MySQL事务
MySQL事务
2022-08-05 09:55:00 【江南无故人】
事务的概念
事务由一组逻辑相关的DML语句(数据库操纵语言)组成,MySQL提供一种机制使这些语句要么全部执行成功,要么全部执行失败。
一个完整的事务需要满足四个属性:
原子性、一致性、隔离性、持久性
简称ACID:
原子性(Atomicity)
一致性(Consistency)
隔离性(Isolation)
持久性(Durability)
事务为应用层服务,不需要数据库使用者考虑很多潜在的错误和并发等问题。
MySQL使用 Innodb 引擎才支持事务 。
show engines \G --查看数据库引擎

事务的属性
原子性:
一个事务中的所有操作,要么全部完成,要么全部不完成。事务在执行过程中发生错误,需要回滚到事务开始前的状态。
持久性:
事务结束后,对数据的修改是永久的,即使系统故障也不影响。
隔离性:
数据库允许多个事务并发读写数据,隔离性可以防止多个事务交叉执行导致数据不一致。
一致性:
事务执行前后,数据库完整性没有被破坏。保证了前三个属性就实现了一致性,当然一致性还需要数据库使用者操作得当。
事务的提交
提交方式有手动提交、自动提交
InnoDB的单条sql语句会被封装成事务,受自动提交影响
查看是否自动提交
关闭自动提交:
SET AUTOCOMMIT=0;

开启自动提交:
SET AUTOCOMMIT=1;

手动提交:
输入begin或者start transaction来开启一个事务
开启后不受自动提交影响,必须通过commit提交,数据才能持久化
操作异常时候,MySQL自动回滚,可以设置回滚点手动回滚,commit后回滚无效。
设置回滚点:
savepoint 回滚点名称;
rollback to 回滚点名称;
rollback; --回滚到最开始
事务的隔离级别
脏读:一个事务读到未提交的数据
幻读:一个事务读到新插入的数据
不可重复读:一个事务前后读取到的某项数据不同
读未提交【Read Uncommitted】:
所有的事务都可以看到其他事务没有提交的执行结果。
相当于没有隔离性,也会有很多并发问题,如脏读,幻读,不可重复读。
读提交【Read Committed】 :
大多数数据库的默认的隔离级别(不是 MySQL 默认的)。一个事务只能看到其他的已经提交的事务所做的改变。这种隔离级别会引起不可重复读。
可重复读【Repeatable Read】:
MySQL 默认的隔离级别,它确保同一个事务,在执行中,多次读取结果相同。但是会有幻读问题(MySQL该级别解决了幻读问题)。
串行化【Serializable】:
事务的最高隔离级别,对所有操作全部加锁,但是串行化会导致超时和锁竞争,效率很低,几乎不使用。
查看全局隔离级别:
SELECT @@global.tx_isolation;

查看当前会话隔离级别:
SELECT @@session.tx_isolation;
SELECT @@tx_isolation;


设置当前或者全局隔离级别:
set session/global transaction isolation level 隔离级别;
总结:
隔离级别越严格 ,安全性越高,但并发性越差
MySQL 读未提交 存在脏读、幻读、不可重复读的问题,
读提交存在 幻读、 不可重复读的问题。
边栏推荐
- 无题六
- Two-table query average grouping in sql server
- 还在找网盘资源吗?快点收藏如下几个值得收藏的网盘资源搜索神器吧!
- CCVR eases heterogeneous federated learning based on classifier calibration
- [Unity] [UGUI] [Display text on the screen]
- 2022-08-01 回顾基础二叉树以及操作
- mysql索引
- Imitation SBUS fixed with serial data conversion
- Which big guy has the 11G GI and ojvm patches in April or January 2020, please help?
- MySQL advanced (twenty-seven) database index principle
猜你喜欢
随机推荐
为什么sys_class 里显示的很多表的 RELTABLESPACE 值为 0 ?
leetcode refers to Offer 10- II. Frog jumping steps
欧盟 | 地平线 2020 ENSEMBLE:D2.13 SOTIF Safety Concept(上)
Concurrent CAS
mysql进阶(二十七)数据库索引原理
Jenkins manual (2) - software configuration
The difference between find, matches, lookingAt matching strings in matcher
js graphics operation one (compatible with pc, mobile terminal to achieve draggable attribute drag and drop effect)
Oracle temporary table space role
Advanced usage of C language
tensorflow.keras cannot introduce layers
手把手教你纯c实现异常捕获try-catch组件
无题四
Handwriting Currying - toString Comprehension
开发常用手册链接分享
egg框架使用(二)
Open Source Summer | How OpenHarmony Query Device Type (eTS)
5. Deploy the web project to the cloud server
入门 Polkadot 平行链开发,看这一篇就够了
Hundred lines of code launch red hearts, why programmers lose their girlfriends!









