質問: ?") defer stmt.Close() stmt.Exec(13, "吉田", 15, "佐藤",62, "鈴木",); ``` go言語1.14、mysql8で書いています
回答: > > すべての行にON DUPLICATE KEY UPDATEを適用してPrepareを書きexecするにはどのようにすればいいのでしょうか? > > > こちらの直接的な回答にはなっていないですが、同一クエリでパラメータが異なる複数の行を効率よくINSERTしたい、という質問に回答します。 * プリペアードステートメントとループを用いる (ループで1行1行INSERTで要件が実現できる場合)プリペアードステートメントを用いてINSERTするクエリはキャッシュしておき、追加したいレコードをループで1行1行INSERTする方法がおすすめです。 クエリ自体はプリペアードステートメントでパースされているため、ループ内ではキャッシュしたステートメントIDとパラメータのみデータベースサーバに送信するため、効率的です。(またGoのランタイムが必要に応じて、コネクションプールから新規にコネクションを生成し、並列にクエリを実行します) * 動的にクエリを生成する 別の方法としてはプリペアードステートメントを使わずに、追加したいレコード数に合わせてクエリのパラメータの数を調整するように、動的にクエリを生成する方法があります。 * その他参考 以下の記事も参考になると思いますので、URLを載せておきます。 golang 一度のinsertで複数のデータをまとめてDBに入れる方法