SQL语句如何rollback

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL语句如何rollback相关的知识,希望对你有一定的参考价值。

数据库中不小心Update 了一张表,想恢复到Update之前的状态,请问我rollback语句应该怎么写。我Update的语句如下:Update BD set IsActive=‘0’,comments='Old 2000' ;

rollback是针对事务的,你如果没有在执行语句之前开启事务,那么无法rollback,建议你还是想别的办法吧,事务语句如下(sqlserver的给你借鉴):
--开启事务
begin tran
--执行操作
update Accounts_UsersExp set TelPhone=123456 where userid=14
--执行错误事务回滚
rollback
--如果正确进行事务提交
commit
可以勾选一句执行一句,但是commit了就不能rollback
参考技术A 回滚要放在事务里面进行,才能进行回滚;sql里面的事务使用关键字TransAction
1:可以用try catch捕获
begin try
begin tran
update table set a=1;
commit tran
end Try
begin catch
rollback tran
end catch

2:可以使用error 全局变量
begin tran
update tablename set ad=1111
if @@error<>0 begin rollback end
commit tran

注意:如果一个事务写了 begin trans ,后面一定要跟上 commit tran或 rollback transaction ,否则可能导致被锁
参考技术B 你这个没有BEGIN ...END 时,第二个ROLLBACK TRANSACTION的存在会产生两个报错
Rolling back the transaction two times would cause an error.
ROLLBACK TRANSACTION 请求没有对应的 BEGIN TRANSACTION。
且第一个ROLLBACK TRANSACTION 与END之前的语句不会执行

你这个有BEGIN ...END 时,不会报错,且第一个ROLLBACK TRANSACTION 与END之前的语句不会执行

这应该是一段完整脚本的片段,你把完整脚本仔细看看吧
参考技术C 如果你已经commit了那么就不能再通过事物回到update之前的状态了,不过如果你用的是oracle数据库,可以用它的数据库闪回机制实现。 参考技术D 在Oracle中提交之后,就不能rollback了

是否正确?回滚并提交

【中文标题】是否正确?回滚并提交【英文标题】:is it correct or no? ROLLEDBACK AND COMMIT 【发布时间】:2020-04-13 17:14:10 【问题描述】:

关于 SQL 中的 COMMIT 语句和 ROLLBACK 语句

我知道 ROLLBACK 语句是 COMMIT 语句的逆语句。

如果我们说“COMMIT 语句是 ROLLBACK 语句的逆”

正确与否?如果不是请解释一下

谢谢你的帮助

【问题讨论】:

不,不一样。如果您回滚,则在您执行更多 DML 之前没有什么可提交的 两者都不是另一个的“逆”。一旦你做了一个提交,你就不能回滚。一旦你做了回滚,你就不能提交。你只能说一个与另一个相反 【参考方案1】:

从 SQL Server 的角度来看,“反向”的使用可能会误导“嵌套”事务

COMMIT: 标记成功的隐式或显式事务的结束。

ROLLBACK: 将显式或隐式事务回滚到事务的开头,或事务内的保存点。

例子:

BEGIN TRAN
BEGIN TRAN
SELECT 'sth';
COMMIT;
SELECT @@TRANCOUNT;
-- 1

BEGIN TRAN
BEGIN TRAN
SELECT 'sth';
ROLLBACK;
SELECT @@TRANCOUNT;
-- 0 (nothing to commit)

db<>fiddle demo

【讨论】:

以上是关于SQL语句如何rollback的主要内容,如果未能解决你的问题,请参考以下文章

sql 语句如何插入全年日期?

如何查找MySQL中查询慢的SQL语句

如何看mysql sql查询语句用了哪些索引?如何分析查询语句?

sql语句 如何创建一个表啊?

SQL语句如何增加列?

如何查找MySQL中查询慢的SQL语句