필자는 Sequel (4.x) 및 MySQL 5.5를 사용하여 쓰기가 많은 응용 프로그램에서 주로 INSERT
을 수행하고 때로는 기존 행을 업데이트합니다. 후속 조치는 .insert()
작업 후에 AUTO_INCREMENT
ID를 반환합니다.후속 키 업데이트를 사용하여 Sequence가 항상 자동 증가 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
에 자동 증가 ID (LAST_INSERT_ID()
) 또는 열의 값이 변경,하지만 수익을 반환 0
열의 값이 수정되지 않은 경우
읽는 중 MySQL docs 이유를 이해합니다. MySQL INSERT...ON DUPLICATE KEY UPDATE
을 수행 할 때, MySQL은 에 의해 이미 존재하지만 변경되지 않은 행의 AUTO_INCREMENT
id를 안정적으로 반환 할 수 없습니다. 난 정말이 특정 응용 프로그램에서 추가 SELECT
을 피하고자
ON DUPLICATE KEY UPDATE `id` = LAST_INSERT_ID(`id`)
: 워드 프로세서와 같은 UPDATE
표현을 사용하는 것이 좋습니다. 어떻게 Sequel이 동일한 동작을 사용하도록 강제 할 수 있으며 실제 변경 사항이 없어도 항상 행 id
을 반환합니까?