MySQL复制INSERT ... SELECT与ORDER BY

时间:2011-04-13 13:46:20

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

documentation page for INSERT ... SELECT表示INSERT ... SELECT使用复制时,必须使用ORDER BY某些列,以便可以按可预测的顺序插入行,因此自动增加列将功能正常。

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

1 个答案:

答案 0 :(得分:1)

如果您对一个列使用ORDER BY,而该列对所有匹配的行没有明确的值,那么该顺序是非确定的,是的。

如果插入的顺序很重要,这会打破基于语句的复制。如果在目标表中使用auto_increment列,插入的顺序肯定很重要,但通常不会这样。

如果您对声明有限制,订单也很重要(也可以更新和删除)。

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


这些规则非常复杂,我建议你只需要在插入中使用完全确定的ORDER BY ...选择,或者使用LIMIT进行UPDATE。

基于行的复制也是你的朋友。我在制作中并没有真正使用它,但是明白了

  • 它更类似于复制在其他数据库中的工作方式
  • 大多数时候它只是工作。