MySQL事务-ROLLBACK,COMMIT用法详解
2025-05-23 20:59
MySQL
SQL Server
Oracle
MySQL
PostgreSQL
NoSQL
大数据
其他数据库
Windows
Windows Server
Linux
macOS
嵌入式
APACHE
NGINX
redis
Docker
git
互联网
tomcat
Html/Css
JavaScript
jQuery
HTML5
Angular
React
Vue
小程序
架构设计
面向对象
设计模式
领域驱动设计
Android开发
iOS开发
Flutter
鸿蒙
其他手机开发
敏捷开发
项目与团队管理
软件工程其他
.NET
Java
Python
Go
PHP
C++
Ruby
Swift
C语言
Erlang
Delphi
Scala
R语言
Verilog
Dart
Rust
其他语言
asp
nodejs
读书区
翻译区
求职面试
计算机图形学
软件测试
菜谱
SEO技术
摄影
生活技巧
115
0
0
0
标题录入
封面图
在 MySQL 中,事务(Transaction)是一组 SQL 操作的集合,这些操作要么全部成功执行,要么全部失败回滚。事务的核心是保证数据的一致性和完整性。为了控制事务的行为,MySQL 提供了 `COMMIT` 和 `ROLLBACK` 两个关键字。 以下是关于 `COMMIT` 和 `ROLLBACK` 的详细用法和解释: --- ### 1. **事务的基本概念** 事务是数据库操作的一个逻辑单元,它具有以下特性(ACID 属性): - **原子性(Atomicity)**:事务中的所有操作要么全部完成,要么全部不完成。 - **一致性(Consistency)**:事务完成后,数据库的状态必须从一个一致状态转换到另一个一致状态。 - **隔离性(Isolation)**:事务之间相互独立,互不干扰。 - **持久性(Durability)**:一旦事务提交,其结果将永久保存。 MySQL 默认情况下是基于行级锁的存储引擎(如 InnoDB),支持事务功能。而 MyISAM 存储引擎不支持事务。 --- ### 2. **事务的开启与关闭** 在 MySQL 中,事务默认是自动提交模式(`autocommit=1`)。这意味着每个单独的 SQL 语句都会被视为一个事务并立即提交。 要手动控制事务,需要显式地开启事务: ```sql START TRANSACTION; ``` 或者使用等价的命令: ```sql BEGIN; ``` 在事务中执行的所有 SQL 操作都会被临时保存,直到显式调用 `COMMIT` 或 `ROLLBACK`。 如果事务未完成,可以通过以下方式结束事务: ```sql ROLLBACK; -- 回滚事务 ``` 如果事务正常完成,则提交更改: ```sql COMMIT; -- 提交事务 ``` --- ### 3. **COMMIT 用法** `COMMIT` 是用来提交事务的关键字,表示当前事务中的所有操作都被永久保存到数据库中。 #### 示例: ```sql START TRANSACTION; -- 执行一系列 SQL 操作 UPDATE accounts SET balance = balance - 100 WHERE id = 1; UPDATE accounts SET balance = balance + 100 WHERE id = 2; COMMIT; -- 提交事务 ``` 上述代码中,`COMMIT` 会将两次更新操作的结果永久保存到数据库中。 --- ### 4. **ROLLBACK 用法** `ROLLBACK` 是用来撤销事务的关键字,表示当前事务中的所有操作都不会对数据库产生任何影响。 #### 示例: ```sql START TRANSACTION; -- 执行一系列 SQL 操作 UPDATE accounts SET balance = balance - 100 WHERE id = 1; UPDATE accounts SET balance = balance + 100 WHERE id = 2; ROLLBACK; -- 回滚事务 ``` 上述代码中,`ROLLBACK` 会撤销两次更新操作,数据库中的余额不会发生变化。 --- ### 5. **事务的自动提交模式** MySQL 默认启用了自动提交模式(`autocommit=1`),即每条 SQL 语句都会作为一个独立的事务立即提交。如果需要禁用自动提交模式,可以设置为 `0`: ```sql SET autocommit = 0; ``` 在这种模式下,需要显式调用 `COMMIT` 或 `ROLLBACK` 来结束事务。 禁用自动提交后,可以通过以下方式结束事务: ```sql COMMIT; -- 提交事务 ROLLBACK; -- 回滚事务 ``` --- ### 6. **事务的隔离级别** 事务的隔离级别决定了事务之间的可见性和并发行为。MySQL 支持以下四种隔离级别(由低到高): - **READ UNCOMMITTED**:读取未提交的数据,可能导致脏读。 - **READ COMMITTED**:只能读取已提交的数据,但可能导致不可重复读。 - **REPEATABLE READ**(默认):保证在同一事务中多次读取相同数据时结果一致。 - **SERIALIZABLE**:最高的隔离级别,强制串行化执行,避免幻读。 可以通过以下命令查看或修改隔离级别: ```sql SHOW VARIABLES LIKE 'tx_isolation'; -- 查看当前隔离级别 SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; -- 修改隔离级别 ``` --- ### 7. **注意事项** - 如果事务未显式调用 `COMMIT` 或 `ROLLBACK`,MySQL 会在会话结束时自动回滚事务。 - 在事务中,SQL 操作会对数据库加锁,确保数据一致性。因此,长时间运行的事务可能会导致性能问题。 - 使用事务时应尽量减少锁定范围,避免死锁。 --- ### 总结 - `COMMIT`:提交事务,将所有操作永久保存。 - `ROLLBACK`:回滚事务,撤销所有操作。 - 使用事务时需根据业务需求合理选择隔离级别,并注意事务的提交与回滚时机。 希望以上内容能帮助你更好地理解和使用 MySQL 的事务功能!如果有进一步的问题,请随时提问。
上一篇:
mysql的autocommit
下一篇:
mysql COMMIT
MySQL事务-ROLLBACK,COMMIT用法详解
标题录入,一次不能超过6条
男人容易犯什么错?
T:0.008996s,M:163.67 KB
返回顶部
留言
留言
评论