Dan*_*anH 10 mysql master-slave
完整错误:
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.
Run Code Online (Sandbox Code Playgroud)
尝试从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;
Run Code Online (Sandbox Code Playgroud)
这样做的目的是对记录进行排序,并对权重应用序号,以便在数据库中保留此顺序.
我已尝试在客户端中运行此命令,看看我是否可以复制该问题,但它仍然成功运行:
mysql> SET GLOBAL binlog_format = 'STATEMENT';
Run Code Online (Sandbox Code Playgroud)
此外,重要的是我要么解决或重写SQL以使用此约束,因为最终的应用程序几乎肯定会在主从数据库设置中运行.
*编辑:在阅读了一下之后binlog_format,好像ROW或MIXED似乎是完全可以接受的,但是我主要担心的是无法在MySQL CLI中复制这个问题以测试MIXED/ROW是否可以解决这个问题?
R. *_* S. 11
没有办法重写sql以不抛出该错误消息.任何类型的命令都将抛出该消息,因为从属可能具有与主服务器不同的行.mixed将解决它,因为它只会row在语句不能安全复制时切换到基于复制statement.
| 归档时间: |
|
| 查看次数: |
16531 次 |
| 最近记录: |