关于MYSQL的事务处理,事务控制
- 并非所有的引擎都支持事务,MYISAM就不支持事务,INNODB支持事务
事务处理:
- 可以维护数据库的完整性,保证成批的MYSQL操作要么完全执行,要么完全不执行
- 如果发生错误,则进行回退(撤销)以恢复数据库到某个已知且安全的状态
在使用事务和事务处理时,有几个关键词汇反复出现。下面是关于事务处理需要知道的几个术语:
事务(transaction) 指一组SQL语句;
回退(rollback) 指撤销指定SQL语句的过程;
提交(commit) 指将未存储的SQL语句结果写入数据库表;
保留点(savepoint) 指事务处理中设置的临时占位符(place-holder),你可以对它发布回退(与回退整个事务处
理不同)。
MySQL使用下面的语句来标识事务的开始:
输入
START TRANSACTION
使用ROLLBACK语句:
SELECT * FROM ordertotals; #为了显示表中是有数据的 START TRANSACTION; #事务开始 DELETE FROM ordertotals; #删除表中所有的行 SELECT * FROM ordertotals; #显示是否已经删除表中的内容 ROLLBACK; #回滚 SELECT * FROM ordertotals; #最终表的数据还在
解析:其实这个就是为了测试事务处理的作用,其中ROLLBACK的作用就是,发生错误,恢复到 START TRANSACTION 语句以前的状态,因为START TRANSACTION 标志着事务的开始。
事务处理用来管理INSERT 、
UPDATE 和
DELETE 语句
。你不能回退SELECT 语句。(这样做也没有什么意义。)
你不能回退
CREATE 或DROP 操作。事务处理块中可以使用这两条语句,但如果你执行回退,它们不会被撤销
使用COMMIT
START TRANSACTION; DELETE FROM orderitems WHERE order_num = 20010; DELETE FROM orders WHERE order_num = 20010; COMMIT;
分析:
在这个例子中,从系统中完全删除订单20010 。因为涉及更新两个数据库表orders 和orderItems ,所以使用事务处理
块来保证订单不被部分删除。最后的COMMIT 语句仅在不出错时写出更改。如果第一条DELETE 起作用,但第二条失败,则
DELETE 不会提交(实际上,它是被自动撤销的)
使用保留点:
设置的第一个保留点
SAVEPOINT delete1; #语法 #SAVEPOINT [点的名字];
可以在MySQL代码中设置任意多的保留点,越多越好。为什么呢?因为保留点越多,你就越能按自己的意愿灵活地进行
回退。