将备份 table 数据还原为原始 table SQL

Revert backup table data to original table SQL

我已经为我的国家创建了备份table。

create table country_bkp as select * from country;

我应该使用什么 SQL 来将 country table 恢复到原始状态? 我可以

insert into country select * from country_bkp;

但它只会有重复的条目并且可能会失败,因为主键是相同的。

Is there an SQL command to merge data back?

最后一个选择是

DROP TABLE country;
create table country as select * from country_bkp;

但我想避免这种情况,因为所有 grants/permissions 都会因此而丢失。

其他更清洁的方法是

delete from country ;
insert into country select * from country_bkp;

但我正在寻找更多无需清除原始数据的合并方法 table。

与其删除 table,如您所述,它会丢失所有权限定义,您可以 truncate 它只是删除所有数据,然后插入 -select旧数据:

TRUNCATE TABLE country;
INSERT INTO country SELECT * FROM county_bkp;

从备份 table 恢复数据的唯一解决方案是使用随机名称重命名原始 table,然后使用原始 Table 名称重命名备份 table 以防身份插入原始 Table。
例如
原始Table-发票
备份 Table - Invoice_back

现在重命名这些 table:

原文Table - Invoice_xxx
备份Table - 发票

在我的例子中,INSERT INTO country SELECT * FROM county_bkp; 没有起作用,因为:

  • 由于以下原因,它不允许我在主键列中插入 indentity_insert 默认关闭。
  • 我的 table 有 TimeStamp 列。

在那种情况下:

  • 允许 identity_insertOriginalTable
  • 插入查询,其中提及 OriginalTable 的所有列(不包括 TimeStamp 列),并在 Values select 中提及 BackupTable 的所有列(排除 TimeStamp 列)
  • 在最后的OriginalTable中限制identity_insert。

示例:

Set Identity_insert OriginalTable ON
    insert into OriginalTable (a,b,c,d,e, ....) --[Exclude TimeStamp Columns here]
    Select a,b,c,d,e, .... from BackupTable --[Exclude TimeStamp Columns here]

    Set Identity_insert OriginalTable Off