Scenerio:MySQL ¿Cómo recupero el ID de LAST_INSERT_ID cuando uso INSERT IGNORE INTO?
- estoy insertando un archivo CVS en mi base de datos.
- estoy usando controlador JDBC para iterar sobre el archivo y hacer las inserciones mis
name
Una columna está hecha de modounique
insertos no cambian la mesa cuando llega mismo valor
- estoy usando
INSERT INTO IGNORE
para mantener el iteración se rompa al evento ocurre - estoy usando LAST_INSERT_ID() para añadir al FK en el siguiente cuadro de inserción
- consigo 0 cuando sucede
INSERT_IGNORE
¿Cómo soluciono esto?
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();
}
}
Ejemplo de archivo CSV que se insertará en la base de datos
US, P1, M, 200, 344
US, P1, L, 233, 344
US, P2, M, 444, 556
MX, Q4, L, 656, 777
Tablas: http://sqlfiddle.com/#!2/b5752
Wha ¿Es el problema que estás tratando de solucionar? Si está haciendo "INSERTAR IGNORAR" y ocurre la ignorancia, no hay un inserto, por lo que no hay un Last_insert_id para esa transacción. Si quería la última identificación de inserción anterior, tenía que capturarla justo después de esa inserción. Pero para el intento de inserción más reciente, si no sucedió, last_insert_id será 0. –
@DMac, entonces, ¿cómo puedo hacer una inserción en una base de datos cuando no desea reemplazar la columna existente cuando ya existe? – stackoverflow
@stackoverflow He publicado una respuesta a continuación que se ajusta a mysql. –