MySQL批量插入和获取插入ID

简介

在使用MySQL数据库时,经常会遇到需要批量插入数据的场景,同时还需要获取插入数据的ID。本文将介绍如何使用MySQL批量插入数据,并获取插入数据的ID。

批量插入

在MySQL中,可以使用INSERT INTO语句来插入单条数据,但是如果要插入大量数据,使用单条插入的方式效率会很低。为了提高插入数据的效率,我们可以使用批量插入的方式。

使用INSERT INTO...VALUES插入多条数据

下面是使用INSERT INTO...VALUES语句插入多条数据的示例代码:

INSERT INTO table_name (column1, column2, column3)
VALUES (value1, value2, value3),
       (value1, value2, value3),
       (value1, value2, value3),
       ...

其中,table_name是要插入数据的表名,column1, column2, column3是要插入数据的列名,value1, value2, value3是要插入的数据值。

示例代码:

INSERT INTO employees (name, age, salary)
VALUES ('John', 25, 5000),
       ('Alice', 28, 6000),
       ('Bob', 30, 7000);

使用INSERT INTO...SELECT插入多条数据

另一种批量插入数据的方式是使用INSERT INTO...SELECT语句。这种方式适用于需要从其他表中查询数据插入到目标表中的场景。

下面是使用INSERT INTO...SELECT语句插入多条数据的示例代码:

INSERT INTO table_name (column1, column2, column3)
SELECT value1, value2, value3
FROM source_table_name
WHERE condition;

其中,table_name是要插入数据的表名,column1, column2, column3是要插入数据的列名,value1, value2, value3是要插入的数据值,source_table_name是源表的表名,condition是筛选条件。

示例代码:

INSERT INTO employees (name, age, salary)
SELECT name, age, salary
FROM temp_employees
WHERE age > 25;

获取插入ID

在MySQL中,可以使用LAST_INSERT_ID()函数来获取最后一次插入数据的ID。

示例代码:

INSERT INTO employees (name, age, salary)
VALUES ('John', 25, 5000);

SELECT LAST_INSERT_ID();

以上代码会先插入一条数据到employees表中,然后通过SELECT LAST_INSERT_ID()获取插入数据的ID。

示例

下面是一个完整的示例,演示了如何使用MySQL批量插入和获取插入ID:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class BatchInsertExample {
    public static void main(String[] args) {
        try {
            // 连接数据库
            String url = "jdbc:mysql://localhost:3306/mydatabase";
            String username = "root";
            String password = "password";
            Connection conn = DriverManager.getConnection(url, username, password);

            // 批量插入数据
            String sql = "INSERT INTO employees (name, age, salary) VALUES (?, ?, ?)";
            PreparedStatement pstmt = conn.prepareStatement(sql);
            pstmt.setString(1, "John");
            pstmt.setInt(2, 25);
            pstmt.setDouble(3, 5000);
            pstmt.addBatch();
            pstmt.setString(1, "Alice");
            pstmt.setInt(2, 28);
            pstmt.setDouble(3, 6000);
            pstmt.addBatch();
            pstmt.setString(1, "Bob");
            pstmt.setInt(2, 30);
            pstmt.setDouble(3, 7000);
            pstmt.addBatch();
            pstmt.executeBatch();

            // 获取插入数据的ID
            ResultSet rs = pstmt.getGeneratedKeys();
            while (rs.next()) {
                int id = rs.getInt(1);
                System.out.println("插入的数据ID:" + id);
            }

            // 关闭连接
            rs.close();
            pstmt.close();
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

以上示例代码使用了Java语言和MySQL JDBC驱动。首先使用DriverManager.getConnection()方法连接到数据库,然后使用PreparedStatement对象批