首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java 獲取 MySQL 自增主鍵 ID 的三種實戰方案

     編輯:Java 程式設計入門

場景痛點

資料插入後,如何精準獲取資料庫自動生成的自增主鍵 ID?這是批次處理、主從表關聯寫入等場景的剛需。

方案一:JDBC 標準 API getGeneratedKeys()(推薦)

String sql = "INSERT INTO users (username,password,email) VALUES (?,?,?)";
PreparedStatement pstmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
pstmt.setString(1, user.getUsername());
pstmt.setString(2, user.getPassword());
pstmt.setString(3, user.getEmail());
pstmt.executeUpdate();

ResultSet rs = pstmt.getGeneratedKeys();
if (rs.next()) {
    int autoIncKey = rs.getInt(1); // 精準拿到剛插入的 ID
}

優點:JDBC 標準、跨資料庫、線程安全、支援批次插入獲取多個 ID。
缺點:需資料庫驅動支援(MySQL 5.0+ 完美支援)。

方案二:SELECT MAX(id)(不推薦用於併發)

SELECT MAX(id) FROM table

致命缺陷:高併發下極易取到其他線程插入的 ID,導致資料錯亂,僅適合單線程或測試環境。

方案三:MySQL 專用函數 LAST_INSERT_ID() / @@IDENTITY

SELECT LAST_INSERT_ID()  -- 或 SELECT @@IDENTITY

特性:基於當前連線,天然隔離併發衝突。
注意:若單條 INSERT 插入多行,返回的是第一行的 ID,後續 ID 需自行推算。

最佳實踐建議

  • 生產環境首選方案一,標準、可移植、安全。
  • 若鎖定 MySQL 且追求極致效能,方案三可作為備選。
  • 嚴禁在併發場景使用方案二。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved