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
对象批