関数を作成しようとしています
CREATE FUNCTION `func`(param1 INT, param2 INT, param3 TEXT) RETURNS int(11)
BEGIN
INSERT INTO `table1` (`column1`, `column2`, `column3` )
VALUES (param1, param2, param3)
ON DUPLICATE KEY
UPDATE `time_stamp` = UNIX_TIMESTAMP();
RETURN last_insert_id();
END
これにより、テーブルに行が存在しない場合は行が挿入されますが、そうでない場合は更新されます。last_insert_id()
関数が挿入された場合に正しいものを返したことに注意してください。それ以外の場合は、更新された場合に予測できません。
これを解決する別の方法は、SELECTS
存在する場合は個別に識別して使用することです。id
存在する場合は、それをupdate
使用して取得しid
ます。それ以外の場合は、プレーンを実行しますINSERT
。
今私の質問:私が今しているsql
こととは対照的に、2つのステートメントを行うことに代わるものはありますか?
編集1
補遺:
自動インクリメント インデックスがあります。挿入する値はすべて一意です
別のテーブルで参照されているため、インデックスを変更したくない..