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

MySQL事务操作全解析

在MySQL中,事务(Transaction)用于确保一组SQL操作要么全部成功执行,要么全部回滚(撤销)。以下是MySQL事务的常用操作及说明:


1. 开启事务

方式一:显式开启
START TRANSACTION;  -- 标准写法
-- 或
BEGIN;             -- 简化写法
方式二:关闭自动提交(隐式开启)
SET autocommit = 0;  -- 关闭自动提交(后续每条SQL需手动提交)

2. 提交事务

将事务中的操作永久保存到数据库:

COMMIT;

3. 回滚事务

撤销事务中的所有操作,恢复到事务开始前的状态:

ROLLBACK;

4. 设置保存点(Savepoint)

在事务中标记一个回滚点,用于部分回滚:

SAVEPOINT savepoint_name;  -- 创建保存点
ROLLBACK TO savepoint_name; -- 回滚到指定保存点
RELEASE SAVEPOINT savepoint_name;  -- 删除保存点

5. 设置事务隔离级别

控制事务间的可见性(解决脏读、幻读等问题):

SET TRANSACTION ISOLATION LEVEL level;
-- 可选级别:
--   READ UNCOMMITTED
--   READ COMMITTED
--   REPEATABLE READ(MySQL默认)
--   SERIALIZABLE

示例:

SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;

6. 检查事务状态

  • 查看当前是否在事务中:
    SELECT @@in_transaction;  -- 返回1表示在事务中
    
  • 查看自动提交状态:
    SELECT @@autocommit;      -- 返回1表示自动提交开启
    

7. 锁机制(事务中常用)

  • 共享锁(读锁):
    SELECT ... LOCK IN SHARE MODE;
    
  • 排他锁(写锁):
    SELECT ... FOR UPDATE;
    

完整事务示例

-- 1. 开启事务
START TRANSACTION;-- 2. 执行操作
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE user_id = 2;-- 3. 判断是否成功(业务逻辑)
IF (一切正常) THENCOMMIT;  -- 提交事务
ELSEROLLBACK;  -- 回滚事务
END IF;

关键注意事项

  1. 存储引擎支持
    InnoDB引擎支持事务(MyISAM不支持)。
  2. 自动提交模式
    默认autocommit=1(每条SQL自动提交),需显式关闭才能启用多语句事务。
  3. 隐式提交
    执行CREATE TABLEALTER TABLE等DDL语句会隐式提交当前事务。
  4. 隔离级别影响
    不同隔离级别对并发性能和数据一致性有直接影响(需根据业务选择)。

事务流程总结

START TRANSACTION
执行SQL操作
操作成功?
COMMIT
ROLLBACK
更改生效
更改撤销

掌握这些操作能有效保证数据库操作的原子性和一致性,适用于转账、订单处理等关键业务场景。

http://www.xdnf.cn/news/1091179.html

相关文章:

  • ReactNative【实战系列教程】我的小红书 6 -- 购物(含商品搜索、商品分类、商品列表)
  • uniapp真机调试“没有检测到设备,请插入设备或启动模拟器后点击刷新再试”
  • 【内核基础精讲】I2C 子系统核心概念与结构全解析
  • 从互联网电脑迁移Dify到内网部署Dify方法记录
  • 【基础算法】贪心 (四) :区间问题
  • Java——异常
  • 自然语言处理中probe探测是什么意思。
  • 从传统到智能:地质灾害风险评估、易发性分析与灾后重建;AI大语言模型DeepSeek、ChatGPT、GIS、Python和机器学习深度融合
  • 【SQL】使用UPDATE修改表字段的时候,遇到1054 或者1064的问题怎么办?
  • 使用SSL For Free 申请HTTPS证书说明文档
  • Laravel 动态生成 PDF:基于 KnpSnappy 实现多公司页眉页脚差异化配置
  • Cadence学习笔记
  • STM32继电器万能控制设备
  • ARM单片机OTA解析(一)
  • HashMap中的get,put方法源码解析(超详细)
  • PHP 基于模板动态生成 Word 文档:图片 + 表格数据填充全方案(PHPOffice 实战)
  • RabbitMQ 高级特性之延迟队列
  • SQL Server通过存储过程实现HTML页面生成
  • mac m1安装大模型工具vllm
  • 迁移Oracle SH 示例 schema 到 PostgreSQL
  • 双指针-15.三数之和-力扣(LeetCode)
  • 算法核心知识复习:排序算法对比 + 递归与递推深度解析(根据GESP四级题目总结)
  • Oracle 数据库升级踩坑:DBLink ORA-02019 问题解决思路
  • 使用 Docker 搭建 Rust Web 应用开发环境——AI教你学Docker
  • 工程改Mvvm
  • 一天一道Sql题(day04)
  • 基于lottie的微信小程序动画开发指南
  • CSS中的Element语法
  • 仓颉语言 1.0.0 升级指南:工具链适配、collection 操作重构与 Map 遍历删除避坑
  • ali linux 安装libreoffice