重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

ステートメントベースのレプリケーションをしている時に、
UPDATE 文でLIMIT 句を使用すると以下の様な警告が出ます。

[Warning] Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted. Statement: DELETE FROM `__TABLE__` WHERE `user_id` = 1234 LIMIT 1

データ更新時にRAND()を使ったりした場合、
ORDER BYの結果が異なってしまうのが理由だと思うのですが、
ORDER BYしていないQueryに対してもwarnが出ています。

それとも何かほかに理由があるのでしょうか?

A 回答 (1件)

>DELETE FROM `__TABLE__` WHERE `user_id` = 1234 LIMIT 1



user_idがユニーク属性なカラムならLIMITはいりません
逆にユニークではないならLIMITによる抽出はレコードを特定できません。
LIMITは最初に出現する1つですが、ORDER BYしない場合は出現順は保証されないからです。

単体で運用しているならともかくレプリケーションを前提とするなら
更新や削除は厳密にデータを特定できる指定をしてください
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!