我正在使用Sequel(4.x)和MySQL 5.5編寫大量應用程序,主要執行INSERT
s並偶爾更新現有行。繼續執行.insert()
操作後,續集會返回一個AUTO_INCREMENT
ID。可以強制繼續使用ON DUPLICATE KEY UPDATE返回自動增量ID嗎?
我目前使用.on_duplicate_key_update()
在表達式,如:
# Insert new row into cache_table, updating any columns that change
# on a key violation
id = DB[:table_name].on_duplicate_key_update.insert(
col1: @col1,
col2: @col2,
created: nil,
updated: nil
)
這將返回自動遞增ID(LAST_INSERT_ID()
)到變量id
當行新插入或列的值的變化,但回報0
如果沒有列的值被修改。
閱讀MySQL docs,我明白爲什麼。當執行MySQL INSERT...ON DUPLICATE KEY UPDATE
時,MySQL無法可靠地返回已存在但未被UPDATE
更改的行的AUTO_INCREMENT
id。該文檔建議使用像UPDATE
表達:
ON DUPLICATE KEY UPDATE `id` = LAST_INSERT_ID(`id`)
我真的想避免額外的SELECT
在這個特定的應用。我如何強制續集使用相同的行爲,並且始終返回行id
,即使沒有任何實際更改?