scenerio:MySQL Jak pobrać identyfikator LAST_INSERT_ID podczas korzystania z INSERT IGNORE INTO?
- ja wkładając plik CSV do mojej bazy danych.
- Używam jdbc sterownik do iteracyjne nad plikiem i zrobić MY wstawia
- Kolumna
name
składaunique
więc wkładki nie zmieniają stolik, kiedy sama wartość przybywa - Używam
INSERT INTO IGNORE
aby utrzymać iteracja pękaniu gdy zdarzenie - używam LAST_INSERT_ID(), aby dodać FK w następnej tabeli wkładki
- otrzymuję 0 gdy
INSERT_IGNORE
dzieje
Jak to naprawić?
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();
}
}
Przykład pliku CSV do umieszczenia w bazie danych
US, P1, M, 200, 344
US, P1, L, 233, 344
US, P2, M, 444, 556
MX, Q4, L, 656, 777
tabelach: http://sqlfiddle.com/#!2/b5752
Wha t jest problem, który próbujesz naprawić? Jeśli robisz "INSERT IGNORE" i następuje ignorowanie, nie ma wkładki, więc nie istnieje Last_insert_id dla tej transakcji. Jeśli chcesz mieć poprzedni ostatni identyfikator wstawki, musisz go przechwycić zaraz po tej wstawce. Ale jeśli chodzi o ostatnią próbę wstawienia, to jeśli to się nie stanie, last_insert_id będzie 0. –
@DMac, a następnie, jak mogę wstawić do bazy danych, gdy nie chcesz zastąpić istniejącej kolumny, gdy już istnieje? – stackoverflow
@ Stackoverflow Wysłałem odpowiedź poniżej, która pasuje do mysql. –