15

LAST_INSERT_ID()自動インクリメント列によって現在の接続に対して生成された最新のIDを返しますが、その値が最後の挿入からのものであり、同じ接続での以前の挿入からのものではないかどうかはどうすればわかりますか?

プールからの接続を使用していて、接続を取得する前に行を挿入した可能性があり、条件付き挿入を実行するとします。

insert into mytable (colA)
select 'foo' from bar
where <some condition>;
select LAST_INSERT_ID();

返された値が挿入からのものかどうかを知る方法がありません。

私が考えた1つの方法は次のとおりです。

@previousId := LAST_INSERT_ID();
insert into mytable (colA)
select 'foo' from bar
where <some condition>;
select if(LAST_INSERT_ID() != @previousId, LAST_INSERT_ID(), null);

値を「クリア」する方法はありLAST_INSERT_ID()ますか?ゼロ以外の値が返された場合、SQL によって引き起こされた新しい値であることがわかりますか?

4

5 に答える 5

5

ROW_COUNT()条件付き挿入の試行が成功したかどうかを判断するために使用し、それLAST_INSERT_ID()に基づいてまたはデフォルト値を返します。

select IF(ROW_COUNT() > 0, LAST_INSERT_ID(), 0);
于 2013-12-29T01:05:39.560 に答える