gpt4 book ai didi

mysql - 这个查询真的不安全吗?

转载 作者:搜寻专家 更新时间:2023-10-30 22:11:02 26 4
gpt4 key购买 nike

以下查询正在按需要执行,但是当我通过我的远程管理工具 (heidisql) 执行时,我收到一条消息指出:

Note: 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.

查询如下:

UPDATE t016sliderimages AS t016

JOIN t004images AS t004
ON t004.ImageID = t016.ImageID

JOIN t034imagealbums AS t034
ON t004.ImageAlbumID = t034.ImageAlbumID


SET t016.SliderNumber = t016.SliderNumber - 1

WHERE t034.ItemID = 32
AND t016.SliderNumber > 4

这可能是误报还是此查询有问题,即使它看起来正在执行所需的操作?

最佳答案

例如,如果您有一个包含键值 1、2、3 的表,并且您希望这些值从零开始,您可以说 set key = key - 1 并且对于大多数 DBMS ,那就足够了。然而,在这方面,MySQL 与大多数 DBMS 不同。假设它首先尝试更新 ID=3 的行。减一,新的 ID 为 2。但是表中已经有 ID=2 的行。糟糕的魔力。

因此,这再次仅适用于 MySQL(据我所知),您必须明确指定 order by 以便不会发生此类冲突。在这种情况下,您必须强制它从最低值开始并逐渐增加。

    SET t016.SliderNumber = t016.SliderNumber - 1
WHERE t034.ItemID = 32
AND t016.SliderNumber > 4
ORDER BY t016.SliderNumber ASC;

但是,您的起始值大于 4。因此,如果高于该值的第一个值是 5,那么您必须确保没有值 = 4。KnoWhaddaMean?

更新:我找到了一个 reference对于这种行为。查找以“如果 UPDATE 语句包含 ORDER BY 子句...”开头的段落

关于mysql - 这个查询真的不安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29054941/

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