1

以下のコードがあります。SELECT LAST_INSERT_ID() を使用すると、最後に挿入された行が常に返されます。最後の行を取得する前に行が実際に挿入されたかどうかを INSERT IGNORE でチェックできますか、または単純に select ステートメントをもう一度実行しますか?

SET _inserted_geolocation_id  =(SELECT id FROM geolocation where latitude= _geolocation_latitude AND longitude = _geolocation_longitude
    AND zoom = _geolocation_zoom AND yaw = _geolocation_yaw AND pitch =_geolocation_pitch);

BEGIN

DECLARE _inserted_geolocation_id int;

INSERT IGNORE INTO geolocation (latitude, longitude, zoom, yaw, pitch) 
VALUES (_geolocation_latitude, _geolocation_longitude, _geolocation_zoom, _geolocation_yaw, _geolocation_pitch);

/*SET _inserted_geolocation_id  = (SELECT LAST_INSERT_ID());*/
SET _inserted_geolocation_id  =(SELECT id FROM geolocation where latitude= _geolocation_latitude AND longitude = _geolocation_longitude
    AND zoom = _geolocation_zoom AND yaw = _geolocation_yaw AND pitch =_geolocation_pitch);

SELECT _inserted_geolocation_id;
END
4

1 に答える 1

2

LAST_INSERT_ID()によって行が挿入されなかった場合は 0 を返します。ドキュメントINSERT IGNOREを参照してください。

INSERT IGNORE を使用し、行が無視された場合、AUTO_INCREMENT カウンターはインクリメントされず、LAST_INSERT_ID() は 0 を返します。これは、行が挿入されなかったことを示します。

于 2012-11-24T17:08:18.343 に答える