[英]Can I SELECT with LAST_INSERT_ID() after INSERT Batch without any cares?
我問自己,在一批INSERT
之后是否可以在WHERE
子句中使用LAST_INSERT_ID()
進行SELECT
而不會在表中獲得損壞的數據? 我正在考慮多個用戶同時做同樣事情的場景。 我開發了一個可以實現這種情況的JSF應用程序。
在硬代碼中,我在INSERT
之后的SELECT
看起來像這樣:
preparedstatement.addBatch(
"INSERT INTO table1(all the FIELDS)"
+ "VALUES(null, ...);"
);
preparedstatement.addBatch(
"INSERT INTO table2(all the FIELDS)"
+ "VALUES(null, LAST_INSERT_ID(), ...);"
);
preparedstatement = connect.prepareStatement(
"SELECT id FROM table3 WHERE id = LAST_INSERT_ID();"
);
preparedstatement.executeBatch();
resultSet = preparedstatement.executeQuery();
讓我對此實現有疑問,還是有更好的方法?
最好的祝福
你應該沒問題,引用MySQL的文檔:
生成的ID在每個連接的基礎上在服務器中維護。 這意味着函數返回給定客戶端的值是為該客戶端影響AUTO_INCREMENT列的最新語句生成的第一個AUTO_INCREMENT值。 此值不受其他客戶端的影響,即使它們生成自己的AUTO_INCREMENT值。 此行為可確保每個客戶端都可以檢索自己的ID,而無需關心其他客戶端的活動,也無需鎖定或事務。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.