使用ROLLBACK数据库
既然咱们已经知道了什么是事务处理,下面讨论事务处理的管理中所涉及的问题。spa
管理事务处理的关键在于将SQL语句组分解为逻辑块,并明确规定数据什么时候应该回退,什么时候不该该回退。code
MySQL使用下面的语句来标识事务的开始:blog
输入:事务
start transaction
输入:MySQL的 ROLLBACK 命令用来回退(撤销)MySQL语句,请看下面的语句:ci
select * from ordertotals; start transaction; delete from ordertotals; select * from ordertotals; rollback; select * from ordertotals;
显然, ROLLBACK 只能在一个事务处理内使用(在执行一条 START TRANSACTION 命令以后)。分析:这个例子从显示 ordertotals 表的内容开始。首先执行一条 SELECT 以显示该表不为空。而后开始一个事务处理,用一条 DELETE 语句删除 ordertotals 中的全部行。另外一条SELECT 语句验证 ordertotals 确实为空。这时用一条 ROLLBACK 语句回退START TRANSACTION 以后的全部语句,最后一条 SELECT 语句显示该表不为空。it
哪些语句能够回退? 事务处理用来管理 INSERT 、 UPDATE 和DELETE 语句。你不能回退 SELECT 语句。(这样作也没有什么意义。)你不能回退 CREATE 或 DROP 操做。事务处理块中可使用这两条语句,但若是你执行回退,它们不会被撤销。io
使用COMMITclass
通常的MySQL语句都是直接针对数据库表执行和编写的。这就是所谓的隐含提交(implicit commit),即提交(写或保存)操做是自动进行的。可是,在事务处理块中,提交不会隐含地进行。为进行明确的提交,使用 COMMIT 语句,以下所示:select
输入:
start transaction; delete from orderitems where order_num = 20010; delete from orders where order_num = 20010; commit;
隐含事务关闭 当 COMMIT 或 ROLLBACK 语句执行后,事务会自动关闭(未来的更改会隐含提交)。分析:在这个例子中,从系统中彻底删除订单 20010 。由于涉及更新两个数据库表 orders 和 orderItems ,因此使用事务处理块来保证订单不被部分删除。最后的 COMMIT 语句仅在不出错时写出更改。若是第一条 DELETE 起做用,但第二条失败,则 DELETE 不会提交(实际上,它是被自动撤销的)。