找回密码
 立即注册
首页 业界区 安全 MySQL事务

MySQL事务

筒霓暄 2025-10-1 13:15:06
事务是数据库管理系统的核心特性,它确保数据库操作要么完全成功,要么完全失败,保持数据的一致性和完整性。
1、事务基础概念

1.1 什么是事务?

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

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

2.1 事务控制语句
  1. -- 开启事务
  2. START TRANSACTION;  -- 或 BEGIN
  3. -- 提交事务
  4. COMMIT;
  5. -- 回滚事务
  6. ROLLBACK;
  7. -- 设置保存点
  8. SAVEPOINT savepoint_name;
  9. -- 回滚到保存点
  10. ROLLBACK TO savepoint_name;
  11. -- 释放保存点
  12. RELEASE SAVEPOINT savepoint_name;
复制代码
2.2 事务模式设置
  1. -- 查看事务自动提交状态
  2. SHOW VARIABLES LIKE 'autocommit';  -- 默认ON
  3. -- 禁用自动提交
  4. SET autocommit = 0;
  5. -- 启用自动提交
  6. SET autocommit = 1;
复制代码
2.3 完整事务示例
  1. START TRANSACTION;
  2. -- 账户A扣款
  3. UPDATE accounts SET balance = balance - 1000 WHERE account_id = 'A';
  4. -- 账户B收款
  5. UPDATE accounts SET balance = balance + 1000 WHERE account_id = 'B';
  6. -- 验证余额
  7. SELECT balance FROM accounts WHERE account_id = 'A' FOR UPDATE;
  8. -- 根据业务逻辑决定提交或回滚
  9. IF (SELECT balance FROM accounts WHERE account_id = 'A') >= 0 THEN
  10.     COMMIT;
  11. ELSE
  12.     ROLLBACK;
  13. END IF;
复制代码
3、事务隔离级别

3.1 并发问题

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

隔离级别脏读不可重复读幻读性能实现机制READ UNCOMMITTED❌❌❌最高无锁READ COMMITTED✅❌❌高行锁REPEATABLE READ (MySQL默认)✅✅❌中MVCC+间隙锁SERIALIZABLE✅✅✅最低表锁3.3 设置隔离级别
  1. -- 查看当前隔离级别
  2. SELECT @@transaction_isolation;
  3. -- 设置会话级隔离级别
  4. SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
  5. -- 设置全局级隔离级别
  6. SET GLOBAL TRANSACTION ISOLATION LEVEL REPEATABLE READ;
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

昨天 22:14

举报

前排留名,哈哈哈
您需要登录后才可以回帖 登录 | 立即注册