mysql什么是事务?及其特性?
封面图
•
2025-12-26
•
MySQL
274
0
0
0
在 MySQL 中,**事务(Transaction)** 是一组 **原子性的 SQL 操作**,这些操作要么全部成功执行,要么全部失败回滚(撤销),以保证数据库的一致性和完整性。 --- ## 一、什么是事务? 事务是数据库管理系统(如 MySQL)中用于处理**需要保持数据一致性的操作**的一种机制。例如: - 在银行转账操作中,从 A 账户扣款,同时给 B 账户加款,这两个操作必须同时成功或同时失败,否则就会出现数据不一致的问题。 事务可以包含多个 SQL 语句,这些语句被当作一个整体来执行。 --- ## 二、事务的特性(ACID) 事务具有四个关键特性,称为 **ACID 特性**: ### 1. **原子性(Atomicity)** - 事务中的所有操作要么全部完成,要么全部不完成。 - 如果事务执行过程中发生错误,数据库会将所有操作回滚(rollback),回到事务开始前的状态。 ### 2. **一致性(Consistency)** - 事务执行前后,数据库的完整性约束(如主键、外键、唯一性等)必须得到保持。 - 事务不能破坏数据库的逻辑规则。 ### 3. **隔离性(Isolation)** - 多个事务并发执行时,彼此之间互不干扰。 - 根据不同的隔离级别(如读未提交、读已提交、可重复读、串行化),事务的可见性和影响程度不同。 ### 4. **持久性(Durability)** - 一旦事务提交(commit),其对数据库的修改就是永久性的,即使系统崩溃也不会丢失。 --- ## 三、MySQL 中事务的使用 MySQL 使用 `BEGIN` 或 `START TRANSACTION` 开始一个事务,使用 `COMMIT` 提交事务,使用 `ROLLBACK` 回滚事务。 ### 示例: ```sql START TRANSACTION; -- 扣款操作 UPDATE accounts SET balance = balance - 100 WHERE name = 'Alice'; -- 存款操作 UPDATE accounts SET balance = balance + 100 WHERE name = 'Bob'; -- 提交事务 COMMIT; ``` 如果中间出错,可以回滚: ```sql ROLLBACK; ``` --- ## 四、MySQL 支持事务的存储引擎 不是所有的 MySQL 存储引擎都支持事务。常见的支持事务的存储引擎是: - **InnoDB**:默认的存储引擎,支持事务、行级锁、外键等。 - **NDB**:用于 MySQL Cluster,也支持事务。 其他如 **MyISAM** 不支持事务。 --- ## 五、事务的隔离级别 MySQL 支持四种事务隔离级别(由低到高): | 隔离级别 | 描述 | |----------|------| | **READ UNCOMMITTED** | 最低级别,允许脏读、不可重复读、幻读 | | **READ COMMITTED** | 可以避免脏读,但可能有不可重复读和幻读 | | **REPEATABLE READ** | 默认级别,避免脏读和不可重复读,但可能有幻读 | | **SERIALIZABLE** | 最高级别,完全隔离,避免所有问题,但性能最差 | 可以通过以下命令查看和设置隔离级别: ```sql -- 查看当前隔离级别 SELECT @@tx_isolation; -- 设置隔离级别(例如设置为 REPEATABLE READ) SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; ``` --- ## 总结 | 项目 | 内容 | |------|------| | 事务 | 一组原子性的 SQL 操作 | | ACID 特性 | 原子性、一致性、隔离性、持久性 | | MySQL 支持 | InnoDB 等支持事务的存储引擎 | | 事务控制 | `BEGIN`, `COMMIT`, `ROLLBACK` | | 隔离级别 | 4 种(READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE) | 如果你有具体的应用场景或问题,欢迎继续提问!
上一篇:
mysql什么是锁?
下一篇:
mysql完整性约束包括哪些?
标题录入,一次不能超过6条
留言
评论