Scenerio:MySQL如何在使用INSERT IGNORE INTO時檢索LAST_INSERT_ID的ID?
- 我插入CSV文件到我的數據庫。
- 我使用JDBC驅動程序來遍歷文件和做我的刀片
- 一個
name
列成爲unique
所以當相同的值到達 - 我使用
INSERT INTO IGNORE
保持刀片不改表從當事件發生 - 我使用LAST_INSERT_ID()在插入的下一個表添加爲FK突破迭代
- 我得到0時
INSERT_IGNORE
發生
我該如何解決這個問題? CSV文件的
Connection con = null;
try
{
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection(URL, USERNAME, PASSWORD);
con.setAutoCommit(false);
Statement s1 = (Statement) con.createStatement();
s1.executeUpdate("INSERT IGNORE INTO ORIGIN (ORI_NAME) VALUES(\""
+ d.getOriginName() + "\")");
Statement s2 = (Statement) con.createStatement();
s2.executeUpdate("INSERT IGNORE INTO STOCK (ORI_ID,S_TITLE) VALUES ("
+ "(SELECT ORI_ID FROM ORIGIN WHERE ORI_ID =LAST_INSERT_ID()),\""
+ d.getStockTitle() + "\")");
}
con.commit();
}
catch (Exception e)
{
if (con != null)
try
{
con.rollback();
}
catch (SQLException e1)
{
e1.printStackTrace();
}
e.printStackTrace();
}
finally
{
if (con != null)
try
{
con.close();
}
catch (SQLException e)
{
e.printStackTrace();
}
}
例被插入到數據庫
US, P1, M, 200, 344
US, P1, L, 233, 344
US, P2, M, 444, 556
MX, Q4, L, 656, 777
表:http://sqlfiddle.com/#!2/b5752
Wha t是你想解決的問題?如果您正在執行「INSERT IGNORE」並忽略,則沒有插入,因此沒有該事務的Last_insert_id。如果您需要上一個插入ID,則需要在插入後立即捕獲它。但對於最近的插入嘗試,如果沒有發生,last_insert_id將爲0. – 2012-03-30 12:57:13
@DMac那麼當不想在現有列已經存在的情況下替換現有列時,如何插入數據庫? – stackoverflow 2012-03-30 13:12:59
@stackoverflow我已經發布了一個適合mysql的答案。 – 2012-05-12 21:43:31