既然我们已经知道了什么是事务处理,下面讨论事务处理的管理中所涉及的问题。
管理事务处理的关键在于将sql语句组分解为逻辑块,并明确规定数据何时应该回退,何时不应该回退。
mysql使用下面的语句来标识事务的开始:
输入:
start transaction
mysql的 rollback 命令用来回退(撤销)mysql语句,请看下面的语句:
输入:
select * from ordertotals; start transaction; delete from ordertotals; select * from ordertotals; rollback; select * from ordertotals;
分析:这个例子从显示 ordertotals 表的内容开始。首先执行一条 select 以显示该表不为空。然后开始一个事务处理,用一条 delete 语句删除 ordertotals 中的所有行。另一条select 语句验证 ordertotals 确实为空。这时用一条 rollback 语句回退start transaction 之后的所有语句,最后一条 select 语句显示该表不为空。
显然, rollback 只能在一个事务处理内使用(在执行一条 start transaction 命令之后)。
哪些语句可以回退? 事务处理用来管理 insert 、 update 和delete 语句。你不能回退 select 语句。(这样做也没有什么意义。)你不能回退 create 或 drop 操作。事务处理块中可以使用这两条语句,但如果你执行回退,它们不会被撤销。
使用commit
一般的mysql语句都是直接针对数据库表执行和编写的。这就是所谓的隐含提交(implicit commit),即提交(写或保存)操作是自动进行的。但是,在事务处理块中,提交不会隐含地进行。为进行明确的提交,使用 commit 语句,如下所示:
输入:
start transaction; delete from orderitems where order_num = 20010; delete from orders where order_num = 20010; commit;
分析:在这个例子中,从系统中完全删除订单 20010 。因为涉及更新两个数据库表 orders 和 orderitems ,所以使用事务处理块来保证订单不被部分删除。最后的 commit 语句仅在不出错时写出更改。如果第一条 delete 起作用,但第二条失败,则 delete 不会提交(实际上,它是被自动撤销的)。
隐含事务关闭 当 commit 或 rollback 语句执行后,事务会自动关闭(将来的更改会隐含提交)。
【相关推荐】
1. mysql免费视频教程
2. mysql事务处理实例讲解
3. mysql update触发器(更新)及触发器深度解析
4. mysql delete触发器(删除)用法详解
5. mysql中insert触发器(插入)详解
以上就是mysql事务-rollback,commit用法详解的详细内容。