Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JDBC generated key from insert on duplicate

Tags:

java

mysql

jdbc

If you have an insert with an ON DUPLICATE KEY clause, and there is a duplicate key, is there any way to get back the primary key that was duplicated? or do I have to do my own manual query? As far as I can tell getGeneratedKeys() from the CallableStatement class will not return as a new insert wasn't actually done.

EDIT Sorry if it wasn't clear but I want to get the PRIMARY KEY of the record back.

So if I were have the following table (excuse syntax, just typing it freehand):

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;

If I were to add 'test' as the value, a new record would be added and the id would be returned by getGeneratedKeys();

If I were to attempt to add 'test' again, the key already exists and therefore the count would be updated. What I want is the primary key/id of that row which was updated. Do I have to see that I get no results back from getGeneratedKeys() - as none where generated - and do another select after the fact?

like image 952
Mr Zorn Avatar asked Nov 12 '22 00:11

Mr Zorn


1 Answers

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

Note: This shouldn't be necessary as of MySQL 5.5.

like image 159
shmosel Avatar answered Nov 15 '22 07:11

shmosel