INSERTクエリを実行するときにON DUPLICATE KEY構文を使用することに慣れています。私はUPDATEクエリで同じことをしたいと思いますが、MySQLでは許可されていないようです。そうでなければ、構文を知らないだけです。UPDATEクエリを実行中にON DUPLICATE KEY機能が有効になっていますか?
私のテーブルには一意のインデックスがあり、UPDATEクエリでできるだけ多くのレコードを更新し、重複キーの原因となるレコードを無視または削除します。仮のクエリは次のようになります。
UPDATE votes SET user = 'foo' WHERE user = 'bar'
ON DUPLICATE KEY <ignore update or delete row>;
私のデータベースに2人のユーザーをマージしようとしています。そのユーザーが既にトピックに対して既存の投票を行っている場合は、重複投票は無視できますが、この場合にはクエリ全体が失敗することはありません。理想的には、重複キーをトリガするレコードを削除したいのですが、それがクエリにロールインされていれば、ずっと優れています。
これは非常にまれなイベントです。この機能がUPDATEには存在しないのであれば、私は複数のクエリで必要なものを達成するための答えについています。
「できるだけ多くのレコードを更新する」とはどういう意味ですか?クエリはレコードを1つだけ更新します。 – Barmar
いいえ、特定のユーザーに対して1000の票があるかもしれません。これらの1000のうちの10個の更新が偽の鍵を引き起こす場合、私は990を成功させ、10を無視または削除します。 –
私はおそらく私のVotesテーブルについての十分な情報を含んでいませんでした。ユニークキーはuser + topicにあります。ユーザーは、さまざまなトピックについて任意の数の投票権を持つことができますが、同じトピックについて複数の投票権を持つことはできません。ユーザーをマージする際に、ユーザーが以前に別々のユーザーが同じトピックに投票した場合があります。 –