MySQL Insert Select详解

MySQL Insert Select详解

MySQL Insert Select详解

1. 简介

在MySQL中,INSERT SELECT语句是一个非常常见和有用的功能,它允许我们将一张表中的数据插入到另外一张表中。通过INSERT SELECT,我们可以在不使用中间表的情况下,将数据从一张表复制到另一张表,或是根据一些条件过滤出一部分数据插入到目标表中。本文将详细介绍MySQL中的INSERT SELECT语句的使用方法,并提供一些示例代码和运行结果。

2. INSERT SELECT语法

INSERT SELECT语句的基本语法如下:

INSERT INTO 表名1 (列1, 列2, 列3, ...) SELECT 列1, 列2, 列3, ... FROM 表名2 WHERE 条件;

其中,表名1是目标表的名称,列1、列2、列3等是目标表中的列名。表名2是源表的名称,列1、列2、列3等是源表中的列名。WHERE条件是可选的,用于过滤源表中的数据。

3. INSERT SELECT示例

3.1 复制整张表

首先,我们来看一个简单的示例,将一张表的数据复制到另一张表中。假设我们有一个students表和一个students_copy表,它们的结构和数据如下:

students表:

id name age
1 张三 18
2 李四 19
3 王五 20
4 赵六 21

students_copy表:

id name age

我们可以使用INSERT SELECT语句将students表中的数据复制到students_copy表中:

INSERT INTO students_copy
SELECT * FROM students;

执行以上SQL语句后,students_copy表的数据如下:

id name age
1 张三 18
2 李四 19
3 王五 20
4 赵六 21

3.2 插入部分数据

除了将整张表的数据复制到目标表中,我们还可以根据一些条件过滤源表中的数据,并将满足条件的数据插入到目标表中。下面是一个示例,假设我们有一个students表和一个students_male表,我们想将students表中性别为男的学生数据插入到students_male表中。

students表:

id name gender age
1 张三 18
2 李四 19
3 王五 20
4 赵六 21

students_male表:

id name gender age

我们可以使用INSERT SELECT语句筛选出性别为男的学生数据,并插入到students_male表中:

INSERT INTO students_male (id, name, gender, age)
SELECT id, name, gender, age 
FROM students 
WHERE gender = '男';

执行以上SQL语句后,students_male表的数据如下:

id name gender age
1 张三 18
2 李四 19

4. INSERT SELECT注意事项

在使用INSERT SELECT语句时,需要注意以下几点:

  • 目标表和源表的结构必须一致,包括表的名称和列的数量、名称、类型等。
  • 可以选择性地插入源表中的某些列,而不是全部列。
  • 可以使用WHERE条件来过滤源表中的数据。
  • 如果目标表中已经存在相同的记录,INSERT SELECT将会插入重复的数据。可以使用INSERT IGNORE语句或ON DUPLICATE KEY UPDATE语句来避免重复插入的问题。
  • INSERT SELECT是一个原子操作,要么全部插入成功,要么全部失败,没有部分插入的情况。

5. 总结

INSERT SELECT语句是MySQL中一个非常有用的功能,可以将数据从一张表复制到另一张表,或是根据条件筛选出一部分数据插入到目标表中。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程