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;