在SQL中复制表

从表面上看,数据复制似乎效率低下;在需要拥有同一表的几乎完全相同的副本的情况下,它有时可以发挥非常关键的作用。

在SQL中,我们可以使用各种方法和技术来复制现有表,并以新名称创建具有相同数据的新表。这在某些任务中非常有用,例如备份、数据转换、不影响主表的临时数据更改等。

在本指南中,我们将探索这些方法,并学习如何在SQL数据库中复制表。由于各种SQL数据库引擎处理表复制的方式不同,我们将不讨论每个数据库的所有方法。

我们将尝试为每个数据库引擎(无论何时支持)至少介绍一个表,以便向您展示如何为每个支持的数据库引擎复制表。

方法1:全局(使用CREATE TABLE语句)

复制表的最常见和最简单的方法是使用CREATE table语句。

与普通的CREATE TABLE语句不同,我们传递的是包含源表的结构和数据的SELECT语句。

语法如下:

创建表new_table

SELECT * FROM source_table;

 

这允许我们从源表中创建一个具有指定名称的新表。

以Sakila示例数据库为例。假设我们要创建一个与租赁表类似的表。

我们可以使用前面的技术,如下面的查询示例所示:

创建表rental_copy AS

SELECT * FROM rental;

 

这将创建一个名为“rental_copy”的新表,它包含与租赁表相同的结构和数据。

您可以通过从表中选择如下数据进行验证:

SELECT * FROM rental_copy;

 

这应该包含与租赁表相同的数据。

方法2:全局(使用INSERT INTO语句)

另一种被各种SQL数据库全局支持的方法是使用INSERT INTO语句。

这种技术允许我们从一个表复制到另一个表。与CREATE TABLE和SELECT不同,这个方法允许我们有选择地获取数据。

当我们在复制过程中需要更多的控制时,这会派上用场。我们可以使用如下所示的语法:

INSERT INTO target_table (column1, column2,…)

SELECT column1, column2,…

从source_table;

 

在这种情况下,我们可以指定希望包含在新表中的列,而不必实际从原始表中获取所有内容。

以以下查询为例:

插入



rental_copy (rental_id

rental_date,

return_date)

选择

rental_id,

rental_date,

return_date



租赁r;

 

这种方法的一个缺点是,它可能需要您创建一个类似的表,其中包含您希望包含的列。在处理大型数据集时,这可能是重复和有效的。

方法3:复制表结构

在其他情况下,您可能会遇到对表结构感兴趣而不需要存储在表中的数据的实例。

在这种情况下,您可以将CREATE TABLE语句与LIKE子句结合使用,如下所示:

创建表new_table(类似source_table);

 

这将创建一个具有指定名称和与“source_table”类似结构的新表,而无需实际复制数据。

在数据库之间复制表

要在不同数据库之间复制表,我们可以从源数据库导出数据并将其导入目标数据库。

这通常涉及使用基于文件的格式,如CSV或特定于数据库的工具。您可以参考数据库的文档,了解如何完成此操作,因为它可能因数据库引擎而异。

方法四:使用链接服务器(SQL Server)

在SQL Server中,我们可以使用链接服务器在数据库之间复制表。

链接服务器允许我们建立与远程数据库的连接,并在它们之间查询或传输数据。

语法如下:

INSERT INTO [LinkedServerName].[DatabaseName].[SchemaName].[target_table]

SELECT * FROM source_table;

 

这允许远程服务器之间的远程连接和数据传输。

结论

在本教程中,我们学习了如何使用和使用在SQL中复制表的各种方法和技术。