MySQL 事务详细说明以及案例
MySQL 事务详细说明
事务(Transaction) 是数据库操作的最小工作单元,包含一组操作,这些操作要么全部成功,要么全部失败。事务具有以下四个特性(ACID):
原子性(Atomicity):事务中的所有操作要么全部完成,要么全部不完成,不会停留在中间状态。
一致性(Consistency):事务执行前后,数据库的状态必须保持一致。
隔离性(Isolation):多个事务并发执行时,一个事务的操作不会影响其他事务。
持久性(Durability):事务一旦提交,对数据库的修改是永久性的,即使系统崩溃也不会丢失。
事务控制语句
BEGIN 或 START TRANSACTION:开始一个事务。
COMMIT:提交事务,使所有修改永久生效。
ROLLBACK:回滚事务,撤销所有未提交的修改。
SAVEPOINT:在事务中设置保存点,可以回滚到该点。
RELEASE SAVEPOINT:删除保存点。
SET TRANSACTION:设置事务的隔离级别。
事务案例
假设有一个银行账户表 accounts
,结构如下:
CREATE TABLE accounts ( id INT PRIMARY KEY, name VARCHAR(50), balance DECIMAL(10, 2) );
插入两条记录:
INSERT INTO accounts (id, name, balance) VALUES (1, 'Alice', 1000.00); INSERT INTO accounts (id, name, balance) VALUES (2, 'Bob', 500.00);
案例:转账操作
Alice 向 Bob 转账 200 元,需要确保两个账户的余额更新要么全部成功,要么全部失败。
START TRANSACTION; -- Alice 账户扣除 200 元 UPDATE accounts SET balance = balance - 200 WHERE id = 1; -- Bob 账户增加 200 元 UPDATE accounts SET balance = balance + 200 WHERE id = 2; -- 提交事务 COMMIT;
如果在执行过程中发生错误,可以使用 ROLLBACK
回滚事务:
START TRANSACTION; -- Alice 账户扣除 200 元 UPDATE accounts SET balance = balance - 200 WHERE id = 1; -- 假设这里发生了错误 -- Bob 账户增加 200 元 UPDATE accounts SET balance = balance + 200 WHERE id = 2; -- 回滚事务 ROLLBACK;
保存点案例
START TRANSACTION; -- Alice 账户扣除 200 元 UPDATE accounts SET balance = balance - 200 WHERE id = 1; -- 设置保存点 SAVEPOINT before_bob_update; -- Bob 账户增加 200 元 UPDATE accounts SET balance = balance + 200 WHERE id = 2; -- 假设这里发生了错误,回滚到保存点 ROLLBACK TO before_bob_update; -- 提交事务 COMMIT;
事务隔离级别
MySQL 支持四种事务隔离级别:
READ UNCOMMITTED:最低隔离级别,允许读取未提交的数据变更。
READ COMMITTED:只能读取已提交的数据。
REPEATABLE READ(默认):确保同一事务中多次读取同一数据的结果一致。
SERIALIZABLE:最高隔离级别,完全串行化执行事务。
设置隔离级别:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
总结
事务是确保数据库操作一致性和完整性的重要机制。通过合理使用事务控制语句和隔离级别,可以有效管理并发操作,避免数据不一致的问题。
本篇文章内容来源于:MySQL 事务详细说明以及案例
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。