gpt4 book ai didi

mysql - 警告 : Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT

转载 作者:IT王子 更新时间:2023-10-28 23:49:09 28 4
gpt4 key购买 nike

完全错误:

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.

我似乎只在尝试从 Django 运行原始 SQL 时收到此错误。如果我从 MySQL CLI 客户端运行 SQL,我不会收到相同的错误。这是 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;

这样做的目的是对记录进行排序,并将序号应用于权重,以便将此排序保留在数据库中。

我已尝试在客户端中运行此命令以查看是否可以复制该问题,但它仍然可以成功运行:

mysql> SET GLOBAL binlog_format = 'STATEMENT';

此外,解决或重写 SQL 以处理此约束也很重要,因为最终应用程序几乎肯定会跨主从数据库设置运行。

*编辑:在阅读了更多 binlog_format 之后,似乎 ROW 或 MIXED 完全可以接受,但我主要担心的是无法在 MySQL CLI 中按顺序复制此问题测试 MIXED/ROW 是否能解决这个问题?

最佳答案

没有办法重写 sql 以不抛出该错误消息。任何类型的订单都会抛出该消息,因为从服务器可能具有与主服务器不同的行。 mixed 将解决它,因为它只会在使用 statement 复制语句不安全时切换到基于 row 的复制。

关于mysql - 警告 : Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17057593/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com