如果你有一个带有ON DUPLICATE KEY子句的插入,并且有一个重复的键,有没有办法找回重复的主键?或者我是否必须自己进行手动查询?据我所知,来自CallableStatement类的getGeneratedKeys()不会返回,因为实际上没有完成新的插入.
编辑对不起,如果不清楚,但我想得到记录的主要关键.
所以,如果我有下表(借口语法,只是徒手打字):
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;
Run Code Online (Sandbox Code Playgroud)
如果我要添加'test'作为值,则会添加一条新记录,并且getGeneratedKeys()将返回id;
如果我再次尝试添加"test",则密钥已经存在,因此计数将会更新.我想要的是更新的那一行的主键/ id.我是否必须看到getGeneratedKeys()没有得到任何结果 - 因为没有生成的结果 - 并在事后做了另一个选择?
ON DUPLICATE KEY UPDATE count = count + 1, id = LAST_INSERT_ID(id)
Run Code Online (Sandbox Code Playgroud)
注意:从 MySQL 5.5 开始,这不再是必需的。