是否可以回滚DELETE,DROP和TRUNCATE?

时间:2016-09-27 13:22:19

标签: sql sql-server

我们可以回滚删除查询但不是截断和删除。当我执行查询然后成功完成roll in delete,drop&截断。

我们可以在删除,截断和删除条件下回滚数据。下降。 但必须在执行查询之前使用Begin Transaction,删除,删除&截断。

以下是示例:

Create Database Ankit

Create Table Tbl_Ankit(Name varchar(11))

insert into tbl_ankit(name) values('ankit');
insert into tbl_ankit(name) values('ankur');
insert into tbl_ankit(name) values('arti');

Select * From Tbl_Ankit

/*======================For Delete==================*/
Begin Transaction
Delete From Tbl_Ankit where Name='ankit'

Rollback
Select * From Tbl_Ankit

/*======================For Truncate==================*/
Begin Transaction
Truncate Table Tbl_Ankit 

Rollback
Select * From Tbl_Ankit

/*======================For Drop==================*/
Begin Transaction
Drop Table Tbl_Ankit 

Rollback
Select * From Tbl_Ankit

3 个答案:

答案 0 :(得分:1)

所有上述3个事务都可以回滚,因为它们都会生成详细日志。有关详细信息,请参阅this SO答案。 this blog以及示例的详细说明。

答案 1 :(得分:1)

对于 MySql

13.3.2无法回滚的语句

某些语句无法回滚。通常,这些语句包括数据定义语言(DDL)语句,例如创建或删除数据库的语句,创建,删除或更改表或存储例程的语句。

您应设计您的交易不包含此类声明。如果您在事务中提早发布了一个无法回滚的语句,然后又有另一个语句失败,则在这种情况下,通过发出ROLLBACK语句就无法回滚事务的全部效果。

https://dev.mysql.com/doc/refman/8.0/en/cannot-roll-back.html

答案 2 :(得分:0)

  

我们可以在删除,删除和放大中回滚吗?截断?

您可以在SQLServer中回滚删除,删除,截断,但在Oracle中您无法回滚截断