【数据分析师_02_SQL+MySQL】029_MySQL的事务管理(TRANSACTION,ROLLBACK,COMMIT,SAVEPOINT)

MySQL的事务管理

1 概述

TRANSACTION 是一种保护机制

在使用事务和事务处理时,有几个关键词汇反复出现。下面是关于事务处理需要知道的几个术语:

  • 事务(transaction)指一组SQL语句
  • 回退(rollback)指撤销指定SQL语句的过程
  • 提交(commit)指将未存储的SQL语句结果写入数据库表
  • 保留点(savepoint)指事务处理中设置的临时占位符(place_x0002_holder),你可以对它发布回退(与回退整个事务处理不同)

事务处理是一种机制,用来管理必须成批执行的MySQL操作,以保证数据库不包含不完整的操作结果。利用事务处理,可以保证一组操作不会中途停止,它们或者作为整体执行,或者完全不执行(除非明确指示)。
如果没有错误发生,整组语句提交给(写到)数据库表。如果发生错误,则进行回退(撤销)以恢复数据库到某个已知且安全的状态。

1.1 事务处理的例子

比如:
A往ATM存入1000¥,此时A-1000¥,假设此时银行收到钱后DB出错没有记录A的账户+1000¥,则A的资产-1000¥,数据库出错。而在存在 Rollback的情况下,银行没有正确记录A的账户+1000¥时,ATM会自动退出这1000¥。

1.2 事务处理的特点

用来维护数据库的完整性,保证成批 SQL操作的成功,如果有问题则全部失败

1.3 事务处理的前提

innodb支持(当前 SQL默认为innodb)
myisam不支持

1.4 事务处理的术语

transaction 事务处理
rollback 回滚
commit 提交
savepoint 存档点

2 MySQL事务管理的使用

2.1 创建一个演示表

start TRANSACTION 就像是在正常游戏存档之外,开了一个副本进行数据处理,这样可以保证原始数据的安全(开启了保护机制)。

2.2 ROLLBACK 回滚数据(备份-删除-恢复)

drop table customers2;
create table customers2 as select * from customers;
select * from customers2;	# 看看啥情况
start TRANSACTION;			# 开启保护机制!
delete from customers2;		# 删掉数据
select * from customers2;	# 看看啥情况
rollback;					# 回滚结果,恢复 customer2
select * from customers2;	# 又恢复了

2.3 COMMIT 提交数据(备份-确认修改)

drop table customers2;
create table customers2 as select * from customers;
select * from customers2;
start TRANSACTION;			# 开启保护机制!
delete from customers2;
select * from customers2;
commit;						# 一旦确认修改,就无法恢复了!

2.4 SAVEPOINT

drop table customers2;
create table customers2 as select * from customers;
select * from customers2;
start TRANSACTION;
delete from customers2 where cust_id = '10001';
select * from customers2;
savepoint x1;
delete from customers2 where cust_id = '10002';
select * from customers2;
ROLLBACK TO x1;
select * from customers2;

【数据分析师_02_SQL+MySQL】029_MySQL的事务管理(TRANSACTION,ROLLBACK,COMMIT,SAVEPOINT)

上一篇:HTTP Status 500 - Request processing failed; nested exception is org.springframework.transaction.Can


下一篇:spring - transaction - 事务抽象