全エラー以来の文形式を使用してバイナリログに書き込ま危険な声明:警告:BINLOG_FORMAT = STATEMENT
Warning: Unsafe statement written to the binary log using statement format
since BINLOG_FORMAT = STATEMENT. Statements writing to a table with an
auto-increment column after selecting from another table are unsafe because
the order in which rows are retrieved determines what (if any) rows will be
written. This order cannot be predicted and may differ on master and the
slave.
私はジャンゴから生のSQLを実行しようとしたときに、このエラーを取得するように見えます。 MySQL CLIクライアントからSQLを実行すると、同じエラーは発生しません。
UPDATE picture p
JOIN (
SELECT @inc := @inc + 1 AS new_weight, id
FROM (SELECT @inc := 0) temp, (
SELECT id FROM picture
WHERE album_id = 5
ORDER BY taken_date ASC
) AS pw
) AS pw
ON p.id = pw.id
SET p.weight = pw.new_weight;
これの目的は、レコードを注文すると、データベースにこの順序を保持するために、重みに連番を適用することである:ここではSQLです。
私はしかし、それはまだ正常に実行され、私は、問題を再現できるかどうかを確認するために、クライアント内でこのコマンドを実行しようとしました:
mysql> SET GLOBAL binlog_format = 'STATEMENT';
はまた、私はどちらかで動作するようにSQLを解決したり、書き換えすることが重要です最終的なアプリケーションとしてのこの制約は、ほぼ確実にマスター・スレーブ・データベースの設定で実行されます。
*編集:binlog_format
を少し読んだあと、ROWまたはMIXEDは完全に受け入れられるようですが、私の主な関心事はMySQLのCLIでこの問題を再現できないため、MIXED/ROW infactこの問題を解決することができますか?
はい私は単純に 'mixed'に切り替えるのが答えだと思います。問題は解決しました。私はCLIで複製することができますが、それは今動作します:) – DanH