errore completa:Attenzione: dichiarazione Unsafe scritto nel registro binario usando il formato economico in quanto BINLOG_FORMAT = istruzione
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.
mi sembra solo per ottenere questo errore quando si tenta di eseguire SQL prima da Django. Se eseguo l'SQL dal client CLI MySQL, non ottengo lo stesso errore. Ecco lo 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;
Lo scopo di questo è quello di ordinare i record, e applicare un numero sequenziale al peso, al fine di persistere questo ordinamento nel database.
Ho provato a fare funzionare questo comando all'interno del client per vedere se riesco a replicare il problema tuttavia si corre ancora con successo:
mysql> SET GLOBAL binlog_format = 'STATEMENT';
Inoltre, è importante che io sia risolvere o riscrivere il codice SQL per lavorare con questo vincolo in quanto l'applicazione finale quasi certamente verrà eseguita attraverso l'installazione di un database master-slave.
* EDIT: Dopo aver letto un po 'più binlog_format
, sembra come se ROW o misto sarebbe perfettamente accettabile, ma la mia preoccupazione principale non è in grado di replicare questo problema nel MySQL CLI, al fine di verificare se MIXED/ROW può infatti risolvere questo problema?
Sì, penso che il semplice passaggio a 'mixed' è la risposta e ha risolto il problema per me. Vorrei poterlo replicare sulla CLI ma ora funziona :) – DanH