お世話になります。
テーブルのレコード更新処理を行うプログラム上から行う場合、
update分を発行する場合とreplace(deleteしてから再度regist)する場合があります。
データーベースエンジンの仕様によるものもあると思いますが、あえてreplaceを使う利点などはありますか。
よろしくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答4件
0
REPLACEはあくまでもDELETE+INSERTなのでUPDATEとは用途が違います。
SQL
1create table tbl( 2id int primary key auto_increment, 3val1 varchar(10), 4val2 varchar(10) 5); 6insert into tbl values(1,'a100','b100'),(2,'a110','b110');
INSERTとUPDATE(実際にはDELETEしてINSERT)が同時に行えます
SQL
1replace into tbl values(1,'a200','b200'),(3,'a120','b120');
※上記、id=1は見た目上UPDATEされ、id=3はINSERTされます
ただしこれは、INSERT~ON DUPLOCATE UPDATEでもできます
SQL
1insert into tbl values(1,'a300','b300'),(4,'a130','b130') 2on duplicate key update val1=values(val1);
大きく違うのはREPLACEがDELETE+INSERTであることから
カラムを指定して処理するとUPDATEとは挙動が違うこと
SQL
1replace into tbl(id,val1) values(1,'a300'),(5,'a140');
この場合id=1はval1が更新されているように見えますが、
DELETEされているわけですからval2も当然NULLになってしまいます。
これはUPDATEが優秀というわけではなく違う処理だということなので
用途にあわせてREPLACEが優先して使われることもあるでしょう。
投稿2017/12/13 01:13
総合スコア117601
0
ベストアンサー
replace?
deleteしてinsertですよね?
メリットがあるとしたら、SQLの記述が簡潔になる場合があるという位?
実行面ではトランザクション量は多くなるしデメリットの方が多いのではないでしょうか。
追記
yambejpさんの投稿を見て、replaceの存在を知ったので、調べた内容を追記しておきます。
replaceはmargeやupsertを実現するためのmysqlの拡張機能ですが、特殊な目的(※)が無い限り「INSERT ON DUPLICATE KEY UPDATE」による本来のupdate or insert
で行った方がよさそうですね。
※どのような場合にreplaceの方が適しているか思い付かないですが。
裏MySQL入門(17) 基礎編11 REPLACE or INSERT ON DUPLICATE KEY UPDATE
投稿2017/12/12 10:05
編集2017/12/13 02:10総合スコア25419
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
適切なインデックスがある限り、UPDATEするよりDELETE&INSERTの方が遅いです。
LOOPの中で100万件くらいUPDATE or DELETE&INSERT して処理時間を実測されては?
以前、100万件以上あるテーブルで TABLE ACCESS FULL(全件走査)になっているUPDATEがあったので、インデックスを追加するように伝えたけど、直さないと言われたこともあります。爆
投稿2017/12/12 20:31
総合スコア16417
0
はい、regist撲滅委員がクソレスしますよー。
投稿2017/12/12 12:26
編集2017/12/12 12:27
退会済みユーザー
総合スコア0
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/12/13 01:56
2017/12/13 02:04
2017/12/14 02:01
2017/12/14 02:11
2017/12/14 03:09