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