删除表不是可恢复的操作,除非作为回滚事务的一部分执行(这似乎不是您的特定情况的场景)。
DROP TABLE 语句删除使用 CREATE TABLE 语句添加的表。指定的名称是表名。
删除的表从数据库架构和磁盘文件中完全删除。该表无法恢复。与该表关联的所有索引和触发器也将被删除。
这不是很完整的画面,作为行为下回滚事务可以用(测试上可以看到https://sqliteonline.com/):
drop table if exists paxtable;
create table paxtable (paxcolumn integer);
insert into paxtable values (42);
begin transaction;
drop table paxtable;
rollback;
select paxcolumn from paxtable;
Run Code Online (Sandbox Code Playgroud)
这表明回滚后该表仍然存在。如果您提交而不是回滚(或者如果您完全删除事务控制),则表已经死亡、过期、去见它的制造者、从这个致命的线圈中洗掉,<在此处插入您最喜欢的比喻>。
所以,既然你没有做到这一点作为一个回滚事务(如由事实表的一部分已经实际上消失),你需要重新创建从头开始(或从备份如果可能的话)。
澄清:
尽管您可以提交或回滚诸如“插入”或“删除”之类的 DML 语句(前提是您在事务中执行此操作),但通常您不能回滚诸如“更改表”或“删除表”之类的 DDL 语句。
在大多数情况下,对于大多数数据库都是如此:Oracle、MSSQL、mySQL 等。
sqlite有一个例外:如果你drop table在一个事务中,那么 arollback将恢复那个表。
否则(根据 sqlite 手册):
DROP TABLE 语句删除使用 CREATE TABLE 语句添加的表。指定的名称是表名。删除的表从数据库架构和磁盘文件中完全删除。该表无法恢复。与该表关联的所有索引和触发器也将被删除。
PS:
如果您有兴趣,此链接讨论“DDL”、“DML”和相关首字母缩略词:
| 归档时间: |
|
| 查看次数: |
1679 次 |
| 最近记录: |