2016-08-05 22 views
0

値を挿入したい場合は、 "重複した更新を挿入する"が更新されますが、新しい挿入されたもので自動増分値は更新されません。私はlast_inserted_idを使用すると、それはちょうど新しい挿入されたものではない更新された列の最後のIDを返す)私は(私はlast_inserted_idを使用するとき、それはちょうど新しいIDを生成し、それが削除されますが、新しい挿入されたクエリでIDを更新したい:挿入が存在する場合は存在する削除が存在し、新しいものを挿入する(自動増分)。私はそこに置き換えられると聞いたが、それは遅いので、 。重複更新に挿入

+0

これを2つのステップで実行します。あなたは正直な 'delete'の後ろに' insert'があることを望みます。それは '重複キー更新 'ではない。 –

+0

@ GordonLinoffしかし、挿入と削除は挿入よりも遅いと聞きました...複製更新 –

+0

@GordonLinoffを削除してから挿入しないと他の方法がありますか?新しいIDで新しい値を更新する必要があります –

答えて

0

オートインクリメントの列を使用してファンシーな更新ロジックを実行しようとすると、

更新時に行に新しい自動インクリメントIDが必要な場合は、古い行を削除して、ゴードン氏のように新しい行を挿入してください。

insert on duplicate key updateを使用するよりわずかに遅いデータベースワークロードがあります。しかし、あなたのテーブルに少なくとも100メガロウが含まれていないか、または一日中と一晩中にこれらの操作の少なくとも10回を実行している場合を除き、パフォーマンスの違いはごくわずかです。そのような種類のデータベースまたはワークロードがある場合は、データベース管理者にアドバイスを依頼してください。

REPLACE = DELETE、次にINSERT。 IODKUは決して削除しません。それぞれのキーには、操作する行が分かるように、UNIQUEキーの列を指定する必要があります。微妙な点:複数のUNIQUEキーがある場合、REPLACEは複数の行を削除し、1つだけ挿入することがあります。

IODKUは、... UPDATE id = LAST_INSERT_ID(id), ...を使用してid(既存または新規)を取得できます。

+0

私はこれを行いますが、重複のどのケースが削除と挿入より遅いのかを知りたいですか? –

+0

'REPLACE'はもっと多くの作業をしなければならないので、常に遅くなる可能性があります。私は答えにいくつかの情報を追加しました。 –

+0

LAST_INSERTED_ID「INSERT ... duplicate update」によって生成された最後のものでIDを更新するようなものを取得したいのですが、更新されたelem(古いもの)のid自体を与えました –

関連する問題