插件窝 干货文章 MySQL命令行插入数据后如何获取自增主键ID?

MySQL命令行插入数据后如何获取自增主键ID?

插入 使用 MySQL INSERT 48    来源:    2025-03-14

在MySQL中,当你向一个带有自增主键(AUTO_INCREMENT)的表中插入数据时,可以通过以下几种方式获取刚刚插入的自增主键ID。

1. 使用 LAST_INSERT_ID() 函数

在MySQL命令行中,插入数据后,你可以立即使用 LAST_INSERT_ID() 函数来获取最后插入的自增ID。

INSERT INTO your_table (column1, column2) VALUES ('value1', 'value2');
SELECT LAST_INSERT_ID();

LAST_INSERT_ID() 函数会返回最后插入的自增ID。

2. 在编程语言中使用对应的API

如果你是在编程语言中操作MySQL(如Python、Java、PHP等),大多数数据库API都提供了获取最后插入ID的方法。

Python (使用 mysql-connector-python)

import mysql.connector

# 连接数据库
conn = mysql.connector.connect(user='username', password='password', host='localhost', database='your_database')
cursor = conn.cursor()

# 插入数据
cursor.execute("INSERT INTO your_table (column1, column2) VALUES ('value1', 'value2')")

# 获取最后插入的ID
last_id = cursor.lastrowid
print("Last Inserted ID:", last_id)

# 提交事务并关闭连接
conn.commit()
cursor.close()
conn.close()

Java (使用JDBC)

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

public class Main {
    public static void main(String[] args) throws Exception {
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/your_database", "username", "password");
        PreparedStatement pstmt = conn.prepareStatement("INSERT INTO your_table (column1, column2) VALUES (?, ?)", Statement.RETURN_GENERATED_KEYS);
        pstmt.setString(1, "value1");
        pstmt.setString(2, "value2");
        pstmt.executeUpdate();

        ResultSet rs = pstmt.getGeneratedKeys();
        if (rs.next()) {
            int lastId = rs.getInt(1);
            System.out.println("Last Inserted ID: " + lastId);
        }

        rs.close();
        pstmt.close();
        conn.close();
    }
}

PHP (使用PDO)

<?php
$dsn = 'mysql:host=localhost;dbname=your_database';
$username = 'username';
$password = 'password';

try {
    $conn = new PDO($dsn, $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $stmt = $conn->prepare("INSERT INTO your_table (column1, column2) VALUES (:value1, :value2)");
    $stmt->execute(['value1' => 'value1', 'value2' => 'value2']);

    $lastId = $conn->lastInsertId();
    echo "Last Inserted ID: " . $lastId;
} catch (PDOException $e) {
    echo "Error: " . $e->getMessage();
}
?>

3. 使用 RETURNING 子句(MySQL 8.0+)

在MySQL 8.0及以上版本中,你可以使用 RETURNING 子句来返回插入的数据,包括自增ID。

INSERT INTO your_table (column1, column2) VALUES ('value1', 'value2') RETURNING id;

这将返回插入的行的 id 列的值。

总结

  • 在MySQL命令行中,使用 LAST_INSERT_ID() 函数。
  • 在编程语言中,使用对应的API方法(如 cursor.lastrowidgetGeneratedKeys()lastInsertId() 等)。
  • 在MySQL 8.0及以上版本中,可以使用 RETURNING 子句。

根据你的使用场景选择合适的方法来获取自增主键ID。