当前位置:网站首页>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 读未提交 存在脏读、幻读、不可重复读的问题,
读提交存在 幻读、 不可重复读的问题。
边栏推荐
- Wei Dongshan Digital Photo Frame Project Learning (6) Transplantation of tslib
- ffmpeg drawtext add text watermark
- egg框架使用(二)
- 2022-08-01 回顾基础二叉树以及操作
- PAT乙级-B1020 月饼(25)
- 什么是CRM决策分析管理?
- IDEA performs the Test operation, resulting in duplicate data when data is inserted
- EU | Horizon 2020 ENSEMBLE: D2.13 SOTIF Safety Concept (Part 2)
- js 图形操作一(兼容pc、移动端实现 draggable属性 拖放效果)
- eKuiper Newsletter 2022-07|v1.6.0:Flow 编排 + 更好用的 SQL,轻松表达业务逻辑
猜你喜欢
Dry goods!Generative Model Evaluation and Diagnosis
偏向锁/轻量锁/重级锁锁锁更健康,上锁解锁到底是怎么完成实现的
Oracle temporary table space role
dotnet OpenXML parsing PPT charts Getting started with area charts
How to realize the short press and long press detection of the button?
Overall design and implementation of Kubernetes-based microservice project
七夕浪漫约会不加班,RPA机器人帮你搞定工作
Marketing Suggestions | You have an August marketing calendar to check! Suggest a collection!
微服务 技术栈
Redis源码解析:Redis Cluster
随机推荐
21 Days of Deep Learning - Convolutional Neural Networks (CNN): Weather Recognition (Day 5)
The difference between find, matches, lookingAt matching strings in matcher
Excuse me if you want to write data in mysql, with flink - connector - JDBC directly is ok, but I'm in the f
正则表达式replaceFirst()方法具有什么功能呢?
19. Server-side session technology Session
Egg framework usage (1)
QSS 选择器
公众号如何运维?公众号运维专业团队
CPU的亲缘性affinity
无题五
自定义过滤器和拦截器实现ThreadLocal线程封闭
mysql进阶(二十七)数据库索引原理
上海控安技术成果入选市经信委《2021年上海市网络安全产业创新攻关成果目录》
欧盟 | 地平线 2020 ENSEMBLE:D2.13 SOTIF Safety Concept(上)
Example of Noise Calculation for Amplifier OPA855
高质量 DeFi 应用构建指南,助力开发者玩转 DeFi Summer
Wei Dongshan Digital Photo Frame Project Learning (6) Transplantation of tslib
First Decentralized Heist?Loss of nearly 200 million US dollars: analysis of the attack on the cross-chain bridge Nomad
Four years of weight loss record
What is the function of the regular expression replaceFirst() method?