1. ホーム
  2. mysql

[解決済み] MySQL ON DUPLICATE KEY - last insert id?

2022-05-04 21:02:47

質問

次のようなクエリがあります。

INSERT INTO table (a) VALUES (0)
  ON DUPLICATE KEY UPDATE a=1

挿入または更新のどちらかのIDが欲しいのですが。私はinsert_id()が「挿入された」IDのみを返し、更新されたIDを返さないと信じているので、通常、これを得るために2番目のクエリを実行します。

2つのクエリを実行せずに、INSERT/UPDATEと行のIDを取得する方法はありますか?

どのように解決するのですか?

こちらのページをご覧ください。 https://web.archive.org/web/20150329004325/https://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

ページ下部には、MySQL関数に式を渡すことで、LAST_INSERT_IDを更新のために意味のあるものにする方法が説明されています。

MySQLドキュメントの例より。

テーブルに AUTO_INCREMENT 列があり、INSERT ... UPDATE で行を挿入した場合、 LAST_INSERT_ID() 関数は AUTO_INCREMENT 値を返します。ステートメントが行を更新する場合、LAST_INSERT_ID() は意味を持ちません。しかし、LAST_INSERT_ID(expr)を使用して、これを回避することができます。idがAUTO_INCREMENT列であると仮定します。LAST_INSERT_ID()を更新のために意味のあるものにするには、以下のように行を挿入します。

INSERT INTO table (a,b,c) VALUES (1,2,3)
  ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), c=3;