可以回滚 DELETE、DROP 和 TRUNCATE 吗?

8

我们可以回滚一个删除操作,但不能回滚截断和删除操作。当我执行查询时,在删除、截断和删除操作中,如果回滚成功就会顺利完成。

在删除、截断和删除操作的条件下,我们可以回滚数据。但在执行删除、截断和删除操作之前必须使用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个回答

7

对于MySql

13.3.2 无法回滚的语句

有些语句是无法回滚的。一般来说,这些语句包括数据定义语言(DDL)语句,例如创建或删除数据库、创建、删除或更改表或存储过程等。

您应该设计您的事务不包含此类语句。如果您在一个事务中早期发出了一个无法回滚的语句,然后稍后另一个语句失败,那么在这种情况下,无法通过发出ROLLBACK语句来回滚事务的全部效果。

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


5
所有以上三个事务都可以回滚,因为它们都生成了详细日志。有关更多信息,请参见此 SO答案。还可以参考此博客,提供了详细的解释和示例。

-2

DELETE(DML)------------------- 用于删除表的元组(行),并具有使用WHERE子句删除一个或多个行的功能 删除示例 ->  delete from emp ; 它将删除表的所有行  delete from emp where id = 2; 它将删除一行 ----------------------Drop(DDL)------------------- 此命令将删除带有数据的整个表结构,因此这是非常重要或关键的命令,只有数据库管理员(DBA)才能访问此命令 删除示例 -> DROP EMP1; 它将消失整个带有结构的表 -------------------TRUNCATE(DDL)---------------- 用于删除表的所有行(元组)。 删除示例 -> TRUNCATE EMP1; ----------------------QUESTIONS------------------- 问题1:如果我们可以从“DELETE”命令和“TRUNCATE”命令中删除所有行,则有何区别? DELETE和TRUNCATE的区别

  1. DELETE命令是DML命令,而TRUNCATE是DDL命令
  2. TRUNCATE命令将删除所有行,因为我们不能在TRUNCATE中使用WHERE子句,但可以在DELETE命令中应用WHERE子句,并且可以通过WHERE条件删除一个或多个行。 问题2:为什么TRUNCATE是DDL,尽管它正在处理数据,而DELETE是DML,它也在处理数据? 答案: 当TRUNCATE命令删除所有行时,我们永远无法回滚已删除的数据,因为在TRUNCATE中隐式调用COMMIT 但是,在删除的情况下,日志(后端文件)会被创建,从中可以获取您的数据回滚(如果误删) 请记住:在DELETE情况下,只能在COMMIT之前执行回滚

1
目前你的回答不够清晰。请编辑并添加更多细节,以帮助其他人理解它如何回答所提出的问题。你可以在帮助中心找到有关如何撰写好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接