MYSQL 事务

1、事务

什么叫事务?

事务就是将一组工作看做一个整体去完成,要么同时成功,要么同时失败,并且遵守ACID事务四大特性。

2、事务操作

1、查看事务提交状态

SELECT @@autocommit;

2、设置事务的提交方式,0为手动,1为自动

SET @@autocommit=0;

3、提交事务

COMMIT

4、回滚事务

ROLLBACK

5、手动开启事务

START TRANSACTION 或 BEGIN

手动开启事务就必须手动提交事务,默认事务是自动开启的,设置事务的提交方式是手动需要手动提交。

3、事务的四大特性ACID

原子性(Atomicity)、一致性(Consistant)、隔离性(Isolation)、持久性(Durability)

原子性:每个事务可操作的最小单位。

一致性:事物之间操作前后应该保持一致

隔离性:事务直接操作不应该互相影响

持久性:数据库操作后放入硬盘中,保持持久

4、并发事务问题

脏读:一个事务读取到另一个事务还没有提交的数据,没有提交说明改事务还没结束。

不可重复读:两次读取同一个数据发生结果不一致的结果,因为第二次读取事务之前,别的事务将该条数据修改提交了,所以读取到的数据前后不一致。

幻读:一个事物读取id=1的某条数据,查询结果显示没有该条数据,此时插入id=1的的数据发生插入失败,感觉到好像有此条数据,是事务A进行查询的时候B事务进行插入,此时查是查不到的。

5、解决并发实物问题(MYSQL默认是可重复读)

|------------|----|-------|----|
| 隔离级别解决对应事务 | 脏读 | 不可重复读 | 幻读 |
| 读未提交 | × | × | × |
| 读已提交 | √ | × | × |
| 可重复读 | √ | √ | × |
| 串行化 | √ | √ | √ |

1、查看事务隔离级别

SELECT @@TRANSACTION_ISOLATION;

2、设置事务隔离界别

SELECT SESSION\|GLOBAL TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED|READ COMMITTED|REPEATABLE READ|SERIALIZABLE}

SERIALIZABLE串行化的实物隔离级别开启后只有别的事务结束了才能继续进行,也就是说事务的隔离级别越高,并发性能越差,但是越安全。

相关推荐
实战派K8S&DB4 分钟前
《基于 Dify + FastAPI + PyTiDB 搭建大模型驱动的 TiDB 智能运维 Agent》
运维·数据库·分布式·云原生·tidb·fastapi
SelectDB10 分钟前
Apache Doris 5.0 年度版本前瞻(一):构建统一的多模湖仓实时分析平台
大数据·数据库·数据分析
小白学大数据32 分钟前
超简单:用 Python 让 Excel 飞起来:用 openpyxl 把重复报表整理交给脚本
开发语言·数据库·python·excel
西索斯coding36 分钟前
doubao-seed-2.1-turbo 调用一直 401 怎么办?pro 版同样的 Key 却正常——5 分钟排查定位指南
java·服务器·数据库·ai
袋鼠云数栈1 小时前
整库迁移与分库分表同步:批量数据搬迁的配置简化思路
jvm·数据库·oracle
小蒜学长2 小时前
基于Springboot+Vue的环保行动志愿者招募系统设计与实现(代码+数据库+LW)
java·数据库·vue.js·spring boot·后端
cfm_29142 小时前
Spring事务
数据库·spring·oracle
一只鹿鹿鹿2 小时前
SCM流程图参考(PPT文件)
大数据·数据库·web安全·系统安全·流程图
ClouGence3 小时前
CloudDM 支持达梦、KingbaseES、GoldenDB,国产数据库也能统一管起来
数据库·sql·开源
举个栗子。3 小时前
DBX:20MB 驾驭 90+ 种数据库的极简开源数据库管理器
数据库·开源