将备份 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_insert
在 OriginalTable
- 插入查询,其中提及
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
我已经为我的国家创建了备份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_insert
在OriginalTable
- 插入查询,其中提及
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