MySQL Insert On Select

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

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

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

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

一、MySQL Insert On Select 的语法

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

INSERT INTO table_name (column_list)  
VALUES (value_list);  

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

INSERT INTO table_name2  
SELECT * FROM table_name1  
WHERE condition;  

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

INSERT INTO table2 TABLE table1;  

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

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

INSERT INTO table_name2 (column_list)  
SELECT column_list   
FROM table_name1  
WHERE condition;  

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

参数说明

table_name1:它是源表的名称。

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

column_list:它表示表的列名。

condition: 用于过滤表格数据。

二、MySQL INSERT INTO SELECT 示例

让我们借助一个示例了解 INSERT INTO SELECT 语句在 MySQL 中的工作原理。首先,我们需要使用下面给出的语句创建一个名为“ person ”的表:

CREATE TABLE person (    
  id int AUTO_INCREMENT PRIMARY KEY,    
  name varchar(45) NOT NULL,    
  email varchar(45) NOT NULL,    
  city varchar(25) NOT NULL    
);  

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

INSERT INTO person (id, name, email, city)     
VALUES (1,'Stephen', 'stephen@javatpoint.com', 'Texas'),     
(2, 'Joseph', 'Joseph@javatpoint.com', 'Alaska'),     
(3, 'Peter', 'Peter@javatpoint.com', 'Texas'),  
(4,'Donald', 'donald@javatpoint.com', 'New York'),     
(5, 'Kevin', 'kevin@javatpoint.com', 'Texas');    

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

SELECT * FROM person;

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

假设我们想将一个属于 Texas City 的人的名字插入到另一个表中。以下查询用于搜索位于德克萨斯州的所有人员:

SELECT name, email, city  
FROM person  
WHERE city = 'Texas';  

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

CREATE TABLE person_info (    
  person_id int AUTO_INCREMENT PRIMARY KEY,    
  person_name varchar(45) NOT NULL,    
  email varchar(45) NOT NULL,    
  city varchar(25) NOT NULL    
);  

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

INSERT INTO person_info (person_name, email, city)  
SELECT name, email, city  
FROM person  
WHERE city = 'Texas';  

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

假设我们要在不过滤任何值的情况下将所有person的表数据插入到person_info表中;我们可以使用以下语句来做到这一点:

INSERT INTO person_info Table person;  

执行 SELECT 语句以验证数据。这是输出结果:

热门文章

优秀文章