MySQL INSERT INTO SELECT

17 Mar 2025 | 4 分钟阅读

有时,我们希望将一个表的数据插入到同一数据库或不同数据库中的另一个表中。使用 INSERT 查询手动输入这些数据并不容易。我们可以使用 MySQL INSERT INTO SELECT 查询来优化此过程。它允许我们快速填充 MySQL 表。本节将介绍 INSERT INTO SELECT 命令、语法及其用例。

MySQL 中的 INSERT INTO SELECT 语句允许我们将值插入到其中数据来自 SELECT 查询的表中。换句话说,此查询将数据从一个表复制到另一个表。在使用此语句之前,我们必须考虑以下几点:

  • 源表和目标表的数据类型必须相同。
  • 目标表中现有的记录应不受影响。

当我们需要将数据从一个表复制到另一个表,或者将来自多个表的汇总数据复制到一个表中时,INSERT INTO SELECT 命令非常有用。

语法

之前,我们使用 **INSERT 命令**在 **VALUES** 子句中列出列值,将单个或多个记录添加到表中,如下所示:

以下是说明 MySQL 中 INSERT INTO SELECT 命令用法的基本语法。如果我们想将所有数据从一个表复制到另一个表,可以使用以下语句:

从 **MySQL 8.0.19 版本**开始,我们可以使用 **TABLE** 语句代替 SELECT 查询来获得相同的输出,如下所示:

这里,TABLE table1 等同于 SELECT * FROM table1。当我们要将源表中的所有记录添加到目标表中而不过滤值时,可以使用它。

如果我们只想将某些列从一个表复制到另一个表,可以使用以下语句:

在此语法中,我们使用了 SELECT 语句而不是 VALUES 子句。这里 SELECT 命令从一个或多个表中检索值。

参数解释

INSERT INTO SELECT 语句使用以下参数:

table_name1:这是源表的名称。

table_name2:这是我们将复制源表数据的目标表的名称。

column_list:它代表表的列名。

condition:它用于过滤表数据。

MySQL INSERT INTO SELECT 示例

让我们通过一个例子来理解 INSERT INTO SELECT 语句在 MySQL 中的工作原理。首先,我们需要使用以下语句创建一个名为“person”的表:

接下来,我们将插入值。我们可以执行以下语句将数据添加到表中:

我们可以通过执行 SELECT 语句来验证数据:

执行查询后,我们可以看到下方的输出,其中表中共有五行:

MySQL INSERT INTO SELECT

假设**我们要将来自德克萨斯州城市的人员姓名插入到另一个表中**。以下查询用于搜索所有位于德克萨斯州的人员:

现在,我们将创建另一个名为 person_info 的表,该表具有与上述表相同数量的列,并且数据类型顺序相同:

其次,我们将使用 INSERT INTO SELECT 语句将 person 表中位于德克萨斯州的人员插入到 person_info 表中

执行此语句后,我们可以使用 SELECT 查询验证插入操作。我们将看到如下输出,其中所有位于德克萨斯州城市的人员都已成功插入。

MySQL INSERT INTO SELECT

假设我们想**将 person 表中的所有数据插入到 person_info 表中**,而不过滤任何值;我们可以使用以下语句来完成:

执行 SELECT 语句来验证数据。输出如下:

MySQL INSERT INTO SELECT