【问题标题】:MySQL Replication of INSERT... SELECT with ORDER BYMySQL 复制 INSERT... SELECT 与 ORDER BY
【发布时间】:2011-04-13 13:46:20
【问题描述】:

documentation page for INSERT ... SELECT 声明,要使 INSERT ... SELECT 与复制一起工作,必须使用 ORDER BY some 列,以便可以以可预测的顺序插入行,因此自动递增列将正常工作。

这让我想知道...当您执行ORDER BY 并且您选择的列不是唯一的时,MySQL 使用什么来决定进一步的排序?它必须是确定性的,否则文档会说您需要选择一个 ORDER BY 唯一列,是吗?还是文档有误?

【问题讨论】:

    标签: mysql replication sql-order-by insert-select


    【解决方案1】:

    如果您将 ORDER BY 与所有匹配行都没有不同值的列一起使用,则顺序是不确定的,是的。

    如果插入的顺序很重要,这确实会中断基于语句的复制。如果您在目标表中使用 auto_increment 列,则插入的顺序当然很重要,但通常不会。

    如果您对语句有限制(更新和删除),顺序也很重要。

    但是,如果您使用基于行的复制,您几乎可以做任何您喜欢的事情,而不会中断复制。至少,除非你真的尝试,否则不会。


    这些规则非常复杂,因此我建议您始终对插入...选择使用完全确定的 ORDER BY,或使用 LIMIT 更新。

    基于行的复制也是您的朋友。我在生产中并没有真正使用它,但理解这一点

    • 它更类似于复制在其他数据库中的工作方式
    • 大多数情况下它都能正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-17
      • 1970-01-01
      • 2014-07-11
      相关资源
      最近更新 更多