insert语句如何返回主键id
时间: 2023-12-29 07:05:56 浏览: 110
在一些数据库中,可以使用 `INSERT INTO` 语句插入数据时直接返回自动生成的主键 ID。不过由于不同数据库的实现方式不同,因此具体的实现方法也各不相同。
下面以 MySQL 和 PostgreSQL 数据库为例,介绍如何使用 `INSERT INTO` 语句返回自动生成的主键 ID。
1. MySQL
在 MySQL 中,可以使用 `LAST_INSERT_ID()` 函数获取上次插入操作生成的自增列的值。因此可以在插入数据时,先插入数据,再通过 `SELECT LAST_INSERT_ID()` 获取自动生成的主键 ID。
```sql
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
SELECT LAST_INSERT_ID();
```
在 Java 代码中,可以使用 `PreparedStatement` 对象的 `getGeneratedKeys` 方法获取自动生成的主键 ID。具体实现步骤如下:
```java
String sql = "INSERT INTO user(name, age) VALUES(?, ?)";
PreparedStatement statement = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
statement.setString(1, "Tom");
statement.setInt(2, 18);
statement.executeUpdate();
ResultSet resultSet = statement.getGeneratedKeys();
if (resultSet.next()) {
Long id = resultSet.getLong(1); // 获取自动生成的主键 ID
}
```
2. PostgreSQL
在 PostgreSQL 中,可以使用 `RETURNING` 子句在插入数据时返回自动生成的主键 ID。
```sql
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...)
RETURNING column_name;
```
在 Java 代码中,可以使用 `PreparedStatement` 对象的 `executeQuery` 方法执行 SQL 语句,并获取自动生成的主键 ID。具体实现步骤如下:
```java
String sql = "INSERT INTO user(name, age) VALUES(?, ?) RETURNING id";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setString(1, "Tom");
statement.setInt(2, 18);
ResultSet resultSet = statement.executeQuery();
if (resultSet.next()) {
Long id = resultSet.getLong("id"); // 获取自动生成的主键 ID
}
```
注意:在使用 `RETURNING` 子句时,需要指定返回的列名或列的索引。
阅读全文