数据库中 rollback 和 commit 是啥时候用的 作用是啥 有啥区别 举几个简单的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库中 rollback 和 commit 是啥时候用的 作用是啥 有啥区别 举几个简单的相关的知识,希望对你有一定的参考价值。

数据库中 rollback 和 commit 是什么时候用的 作用是什么 有什么区别 举几个简单的数据库中 rollback 和 commit 是什么时候用的 作用是什么 有什么区别 举几个简单的例子

COMMIT是表示【提交】,就是提交事务的所有操作。
具体地说,就是将事务中的所有对数据库的更新写回到磁盘上的物理数据库中去,事务正常结束。
ROLLBACK指的是【回滚】,即是在事务的运行过程中,发生了某种故障,事务不能继续执行,系统将事务中对数据库的所有的已完成的操作全部撤销,回滚到事务开始之前的状态。
总之,就是一个成功,一个不成功
参考技术A 通常是用在存储过程或者嵌入式SQL编程中,一个事务如果包含多个动作,尤其是多个改写数据库数据的动作,应该在最后写上commit,而在捕获到错误时,进行rollback。追问

你指的捕获是自己发现错误是吗

但是没有catch 这个东西

追答

你这个完全是为了做题而做题,实际工程中没有这样做的,不会在自己的业务代码中出现rollback的,如果在正常的业务中写了rollback,那样就取消了前面已经做的工作,还有什么意义。
这个肯定是数据库课程上出的题目,为了加深对于commit和rollback的理解而故意这样设置的。

追问

对啊对啊

但没有您所说的catch

不知道是啥

追答

就是采用一种高级语言(例如Java)连接你的数据库,然后做正常的业务,在某个模块中有一些跟数据库打交道的业务(例如银行系统中的转账业务),此时有可能会出现转账失败(例如网络通信出问题了),在Java语言的异常处理中有一个catch语句,捕获并处理异常,这个代码块的最后一句话就应该写rollback。
单纯从你目前纯SQL中,是没有catch语句的。

追问

谢谢您 最后一个问题 rollback 可以被rollback吗?(commit 不能被rollback)

本回答被提问者采纳

MySQL事务-ROLLBACK,COMMIT用法详解

使用ROLLBACK

既然我们已经知道了什么是事务处理,下面讨论事务处理的管理中所涉及的问题。

管理事务处理的关键在于将SQL语句组分解为逻辑块,并明确规定数据何时应该回退,何时不应该回退。

MySQL使用下面的语句来标识事务的开始:

输入:

start transaction


输入:MySQL的 ROLLBACK 命令用来回退(撤销)MySQL语句,请看下面的语句:

技术图片
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 语句显示该表不为空。

哪些语句可以回退? 事务处理用来管理 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;


隐含事务关闭 当 COMMIT 或 ROLLBACK 语句执行后,事务会自动关闭(将来的更改会隐含提交)。分析:在这个例子中,从系统中完全删除订单 20010 。因为涉及更新两个数据库表 orders 和 orderItems ,所以使用事务处理块来保证订单不被部分删除。最后的 COMMIT 语句仅在不出错时写出更改。如果第一条 DELETE 起作用,但第二条失败,则 DELETE 不会提交(实际上,它是被自动撤销的)。

以上是关于数据库中 rollback 和 commit 是啥时候用的 作用是啥 有啥区别 举几个简单的的主要内容,如果未能解决你的问题,请参考以下文章

oracle中,已commit的数据能rollback回滚吗?

oracle中的commit和rollback

oracle中的commit和rollback

请问oracle commit以后还能再回滚吗,rollback必须写在commit之前吗

sql server中的事务是啥意思

sql语言是啥语言?