MySQL で InnoDB テーブルを使用しています。アプリケーションは PHP で作成されますが、理想的には、これはすべてクエリを介して行われます。典型的な整数 auto_increment 主キーを持つテーブルがいくつかあります。行を複製する必要がある場合もありますが、新しい主キーの値がないと複製できません。クエリで列のリストをハードコードする場合、これは簡単ですが、それは避けたいと思います。挿入する前に既存の主キー値を取り除くことができるように一時テーブルを使用するコードを書きましたが、明らかにそれはレプリケーション セーフではありません (また、MySQL 5.1 のドキュメントは、一時テーブルを使用するときにどのクエリが暗黙のコミットを引き起こす可能性があるかについて一貫性がありません。 )。
私は基本的に の概念的な反対を望んでいINSERT IGNORE
ます。既存の行を更新するのではなく、新しい主キー値が必要です。列のリストをハードコーディングせずにこれを行う合理的な方法はありますか?
編集:変更が必要な列は主キーだけではないことを明確にする必要があります。通常、別のレコード タイプの ID を参照するものがもう 1 つあります。全体的な目標は、既存のレコードを複製し、それを別の親レコードに添付することです。私の衝動は、レコードを複製してから、2 番目のクエリで他の更新を行うことです。