当前位置: 首页 > news >正文

MySQL事务

事务是数据库管理系统的核心特性,它确保数据库操作要么完全成功,要么完全失败,保持数据的一致性和完整性。

1、事务基础概念

1.1 什么是事务?

事务是一组原子性的 SQL 操作,这些操作要么全部执行成功,要么全部失败回滚。事务将数据库从一种一致状态转换为另一种一致状态。

1.2 ACID 特性

特性 描述 实现机制
原子性 (Atomicity) 事务不可分割,要么全部成功,要么全部失败 Undo Log
一致性 (Consistency) 事务使数据库从一个有效状态转换到另一个有效状态 应用层 + 数据库约束
隔离性 (Isolation) 并发事务相互隔离,互不干扰 锁机制 + MVCC
持久性 (Durability) 事务提交后,修改永久保存 Redo Log

2、MySQL 事务操作

2.1 事务控制语句

-- 开启事务
START TRANSACTION;  -- 或 BEGIN-- 提交事务
COMMIT;-- 回滚事务
ROLLBACK;-- 设置保存点
SAVEPOINT savepoint_name;-- 回滚到保存点
ROLLBACK TO savepoint_name;-- 释放保存点
RELEASE SAVEPOINT savepoint_name;

2.2 事务模式设置

-- 查看事务自动提交状态
SHOW VARIABLES LIKE 'autocommit';  -- 默认ON-- 禁用自动提交
SET autocommit = 0;-- 启用自动提交
SET autocommit = 1;

2.3 完整事务示例

START TRANSACTION;-- 账户A扣款
UPDATE accounts SET balance = balance - 1000 WHERE account_id = 'A';-- 账户B收款
UPDATE accounts SET balance = balance + 1000 WHERE account_id = 'B';-- 验证余额
SELECT balance FROM accounts WHERE account_id = 'A' FOR UPDATE;-- 根据业务逻辑决定提交或回滚
IF (SELECT balance FROM accounts WHERE account_id = 'A') >= 0 THENCOMMIT;
ELSEROLLBACK;
END IF;

3、事务隔离级别

3.1 并发问题

问题 描述 示例
脏读 读取到未提交的数据 事务A读取事务B未提交的修改
不可重复读 同一事务内多次读取结果不同 事务A两次读取间数据被事务B修改
幻读 同一查询返回不同行数 事务A查询期间事务B插入新行

3.2 隔离级别对比

隔离级别 脏读 不可重复读 幻读 性能 实现机制
READ UNCOMMITTED 最高 无锁
READ COMMITTED 行锁
REPEATABLE READ (MySQL默认) MVCC+间隙锁
SERIALIZABLE 最低 表锁

3.3 设置隔离级别

-- 查看当前隔离级别
SELECT @@transaction_isolation;-- 设置会话级隔离级别
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;-- 设置全局级隔离级别
SET GLOBAL TRANSACTION ISOLATION LEVEL REPEATABLE READ;
http://www.agseo.cn/news/236/

相关文章:

  • 线段树板子
  • 双列圆锥滚子轴承载荷分布计算程序
  • NOIP 集训日记
  • 矢量篇 - KMLKMZ转SHP
  • js空值合并运算符?? - jerry
  • 记录---让网页像现实世界一样“拿起来,放进去”
  • Python面向对象
  • ubuntu上通过kvm新建虚拟机
  • buntu22.04 LTS安装docker以及docker-compose实践
  • 关于USB 无线 WIF 设备驱动安装的问题
  • Spring Boot常用注解-详细解析+示例 - 指南
  • test
  • Ubuntu22.04安装Docker过程记录
  • linux
  • 20分钟快速入门Docker
  • K8S的基础概念
  • MySQL多表查询
  • 如何搭建K8S集群
  • 软件工程导论第一次作业
  • MAG-GNN: Reinforcement Learning Boosted Graph Neural Network | 代码 |
  • GCFExplainer: Global Counterfactual Explainer for Graph Neural Networks
  • Spring Boot 笔记
  • 闲话 25.9.8
  • The 2025 ICPC Asia East Continent Online Contest (I)
  • Ubuntu22.04下Docker的安装Docker镜像源问题解决方法
  • 使用通义灵码快速生成换装、瘦身程序 #Qwen3-Coder挑战赛# - yi
  • 软件工程第一次作业-tanglei
  • xtrabackup 8.0日常管理
  • 解决 .NET 7 在 Linux 上获取程序集的问题
  • 从KPI管理转向更困难的OKR管理的企业都在想什么