目录
事务处理
并非所有引擎都支持事务处理
MyISAM
和
InnoDB
是两种最常使用的引擎。前者不支持明确的事务处理管理,而后者支持。
事务处理(
transaction processing
)可以用来维护数据库的完整性,它保证
成批的MySQL操作
要么完全执行,要么完全不执行。
事务处理是
一种机制
,用来管理必须
成批执行的MySQL操作
,以保证数据库不包含不完整的操作结果。
利用事务处理,可以保证一组操作不会中途停止,它们或者作为整体执行,或者完全不执行(除非明确指示)
。如果没有错误发生,整组语句提交给(写到)数据库表。如果发生错误,则进行回退(撤销)以恢复数据库到某个已知且安全的状态。
事务
(
transaction
)指一组
SQL
语句;
回退
(
rollback
)指撤销指定
SQL
语句的过程;
提交
(
commit
)指将未存储的
SQL
语句结果写入数据库表;
保留点
(
savepoint
)指事务处理中设置的临时占位符(
place-holder),你可以对它发布回退(与回退整个事务处理不同)。
控制事务处理
MySQL使用下面的语句来标识事务的开始:
使用ROLLBACK
显然,
ROLLBACK只能在一个事务处理内使用
(在执行一条
START TRANSACTION命令之后)。
![](https://i-blog.csdnimg.cn/blog_migrate/8652a9faa9f96671a0e8fe79b9633973.png)
使用COMMIT
一般的
MySQL
语句都是直接针对数据库表执行和编写的。这就是所谓的
隐含提交
(
implicit commit
),即提交(写或保存)操作是自动进行的。
在事务处理块中,提交不会隐含地进行。为进行明确的提交, 使用COMMIT
语句
![](https://i-blog.csdnimg.cn/blog_migrate/ca2aa84892fe95dfdc5e786b8e4dca8c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f48295e335f22d1a55ba6a3094c71e11.png)
使用保留点
简单的
ROLLBACK
和
COMMIT
语句就可以写入或撤销整个事务处理。但是,只是对简单的事务处理才能这样做,更复杂的事务处理可能需要
部分提交或回退
为了支持回退部分事务处理,必须能在事务处理块中
合适的位置放置占位符
。这样,如果需要回退,可以回退到某个占位符。
这些占位符称为
保留点
创建占位符
![](https://i-blog.csdnimg.cn/blog_migrate/de226452915529cbe4cd397fe54120ff.png)
回退到本例给出的保留点
![](https://i-blog.csdnimg.cn/blog_migrate/3a078119c2749cbd166d0d0b42fb4678.png)
![](https://i-blog.csdnimg.cn/blog_migrate/7ced6a6133969c5d64c8b835404f5b08.png)