【问题标题】:Issue with generated primary keys when using INSERT ON DUPLICATE KEY UPDATE使用 INSERT ON DUPLICATE KEY UPDATE 时生成的主键出现问题
【发布时间】:2012-01-24 12:50:11
【问题描述】:

我正在 JSF 2.0 中开发一个应用程序,因为我正在使用 MySQL 作为 DBMS。 我遇到了 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”有以下列:

aanweziigheidId (INT(11), 主键)| jongerid|基准|安维齐格| aankomstTijd| vertrekTijd|替代坎普| redenAfwezig

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

【问题讨论】:

  • 你能发布SHOW CREATE TABLE aanwezigheid_i;的输出吗?

标签: mysql sql


【解决方案1】:

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

这是设计使然,除了不使用AUTO_INCREMENT之外,您无能为力。

【讨论】:

  • 你知道如何在插入之前获取主键的值吗?我需要它的值来填写“?”对于 INSERT 语句中的“aanwezigheidId”。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    • 2016-10-29
    • 1970-01-01
    • 2013-10-03
    • 2015-07-30
    相关资源
    最近更新 更多