使用INSERT ON DUPLICATE KEY UPDATE时生成的主键问题

时间:2012-01-24 12:50:11

标签: mysql sql

我正在开发JSF 2.0中的应用程序,因为DBMS我正在使用MySQL。 我遇到了INSERT ... ON DUPLICATE KEY UPDATE语句的问题,每次更新一行时都会生成一个新的主键。这是我正在使用的查询。

INSERT INTO aanwezigheid_i (jongereId, datum, aanwezig, aankomstTijd, vertrekTijd, alternatiefKamp, redenAfwezig)
VALUES (?,?,?,?,?,?,?)
ON DUPLICATE KEY
UPDATE aanwezig = ?, aankomstTijd = ?, vertrekTijd = ?, alternatiefKamp = ?, redenAfwezig = ?

表'aanwezigheid_i'包含以下列:

  

aanwezigheidId(INT(11),PRIMARY KEY)| jongereId |数据| aanwezig | aankomstTijd | vertrekTijd | alternatiefKamp | redenAfwezig

如果我插入第一行,主键'aanwezigheidId'的值为1。 如果我将第一行更新10次并在之后插入第二行,则第二行的主键值为12而不是2.我做错了什么? 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

如果您使用AUTO_INCREMENT密钥,请注意,在尝试AUTO_INCREMENT之前,计算新的INSERT值是。如果INSERT转换为UPDATE,则新AUTO_INCREMENT值将丢失。

这是设计的,除了不使用AUTO_INCREMENT

之外,你无能为力

答案 1 :(得分:1)

您没有将 aanwezigheidId - 主键 - 发送到INSERT,这就是创建新行的原因。 ON DUPLICATE KEY UPDATE子句仅在插入包含现有密钥的记录时生效。