MySQL事务
事务是数据库管理系统的核心特性,它确保数据库操作要么完全成功,要么完全失败,保持数据的一致性和完整性。1、事务基础概念
1.1 什么是事务?
事务是一组原子性的 SQL 操作,这些操作要么全部执行成功,要么全部失败回滚。事务将数据库从一种一致状态转换为另一种一致状态。
1.2 ACID 特性
特性描述实现机制原子性 (Atomicity)事务不可分割,要么全部成功,要么全部失败Undo Log一致性 (Consistency)事务使数据库从一个有效状态转换到另一个有效状态应用层 + 数据库约束隔离性 (Isolation)并发事务相互隔离,互不干扰锁机制 + MVCC持久性 (Durability)事务提交后,修改永久保存Redo Log2、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 THEN
COMMIT;
ELSE
ROLLBACK;
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;
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! 前排留名,哈哈哈
页:
[1]