技術向上

プログラミングの学び、気になるテクノロジーやビジネストレンドを発信

最後にInsertまたはUpdateしたレコードのIDを取得する【MySQL】

InsertまたはUpdateした後に、他の関連テーブルを操作するため、処理したレコードのIDを使いたい場合があるかと思います。そんな時は、LAST_INSERT_IDを利用します。
Upsert時に、UpdateしたレコードのIDを取得したい場合は、LAST_INSERT_IDを併せて更新する必要があります。

INSERT INTO categories_shops(
    category_id,
    shop_id,
    status,
    created_at,
    updated_at
)
VALUES(
    1,
    1,
    1,
    CURRENT_TIMESTAMP,
    CURRENT_TIMESTAMP
)
ON DUPLICATE KEY UPDATE
    status = 9,
    updated_at = CURRENT_TIMESTAMP,
    id = LAST_INSERT_ID(    // Updateの時にもIDを利用できるようにするには、更新が必要
        id
    )
;SELECT LAST_INSERT_ID();    // 最後に処理したレコードのIDを取り出す