2013-08-07 13 views
5

Jeśli masz wkładkę z klauzulą ​​ON DUPLICATE KEY i istnieje duplikat klucza, czy istnieje jakikolwiek sposób na odzyskanie klucza podstawowego, który został zduplikowany? czy muszę zrobić własne zapytanie ręczne? O ile mogę powiedzieć, getGeneratedKeys() z klasy CallableStatement nie zwróci, ponieważ nowa wstawka nie została faktycznie wykonana.Klucz wygenerowany przez JDBC z insertu na duplikacie

EDIT Przepraszam, jeśli nie było to jasne, ale chcę odzyskać KLAWISZ PIERWOTNY rekordu.

Więc gdybym miał następującą tabelę (składnię wybaczyć, po prostu wpisując je odręczne):

CREATE TABLE some_table(
    id int(11) unsigned NOT NULL AUTO_INCREMENT, 
    value varchar(500)NOT NULL, 
    count int(10) unsigned NOT NULL DEFAULT '0', 
    PRIMARY KEY (id), 
    UNIQUE KEY (value) 
); 

INSERT INTO some_table(value) ON DUPLICATE KEY UPDATE count = count + 1; 

Gdybym dodać „test” jako wartość, nowy rekord zostanie dodany oraz identyfikator zostanie zwrócony przez getGeneratedKeys();

Jeśli spróbuję ponownie dodać "test", klucz już istnieje i dlatego liczba zostanie zaktualizowana. To, czego chcę, to podstawowy klucz/identyfikator tego wiersza, który został zaktualizowany. Czy muszę zobaczyć, że nie otrzymuję żadnych wyników z getGeneratedKeys() - jak żaden z wygenerowanych - i czy wybrać inny po fakcie?

+4

Z pewnością znasz duplikat, ponieważ znajduje się on w wyciągu, który właśnie wykonałeś? –

+1

Czy możesz podać przykład, w którym nie wiesz, co to był klucz przed próbą wstawienia? Nie wydaje się, żeby to się mogło zdarzyć ... –

+2

Przepraszam - pewnie powinienem być bardziej jasny. Chcę przywrócić klucz podstawowy tabeli. –

Odpowiedz

0
ON DUPLICATE KEY UPDATE count = count + 1, id = LAST_INSERT_ID(id) 

Uwaga: Nie powinno to być konieczne od wersji MySQL 5.5.

+0

To mi w ogóle nie pomoże, nadal musiałbym wykonać dodatkowe zapytanie, aby odzyskać identyfikator. Próbowałem zrobić to wszystko w jednym kroku. –

+0

Wierzę, że 'getGeneratedKeys()' zwróci teraz klucz, którego szukasz. – shmosel

+0

@MrZorn Czy próbowałeś? – shmosel

Powiązane problemy