gpt4 book ai didi

mysql - 如何摆脱 "Unsafe statement written to the binary log"消息

转载 作者:行者123 更新时间:2023-11-29 10:52:41 26 4
gpt4 key购买 nike

我正在执行一个简单的 UPDATE 语句,以根据 HTMLEmailLog 表中具有指定 ID 的记录更新 Contact 表中的字段。这是查询:

UPDATE Contact AS c 
INNER JOIN HTMLEmailLog AS h ON c.CustomerID = h.MemberID and c.Email1 = h.Email
SET c.ValidEmail1 = 'N'
WHERE h.id = 160605 ;

我收到警告:

上次查询的警告:注意:使用语句格式写入二进制日志的不安全语句因为 BINLOG_FORMAT = 语句。写入表的语句从另一个表中选择后自动增量列是不安全的,因为检索行的顺序决定了哪些行(如果有)书面。该顺序无法预测,并且在主机和主机上可能有所不同奴隶

有人可以解释一下为什么我会收到此警告消息吗?有什么办法可以摆脱这个警告吗?如果我直接更新联系人表(不使用 JOIN),我不会收到警告消息。

谢谢。

最佳答案

首先,这不是错误消息,这是警告。这意味着mysql担心更新语句是否可以使用基于语句的复制准确地复制到从站。

  1. 如果您不使用复制,则无需担心。

  2. 如果您使用复制,请考虑更改 replication mode to mixed 。在混合模式下,如果检测到潜在的不安全语句,mysql 将使用基于行的复制而不是基于语句的复制。

您还可以尝试重写更新以使用子查询而不是联接来指示仅更新 contact 表:

UPDATE Contact AS c         
SET c.ValidEmail1 = 'N'
WHERE (c.CustomerID, c.Email1) IN (SELECT MemberID, Email FROM HTMLEmailLog WHERE id = 160605);

关于mysql - 如何摆脱 "Unsafe statement written to the binary log"消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43454802/

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