0

INSERT ... SELECT的文档页面指出,INSERT ... SELECT要使用复制,ORDER BY必须使用一些列,以便可以以可预测的顺序插入行,因此自动增量列将正常工作。

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

4

1 回答 1

1

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

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

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

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


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

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

  • 它更类似于复制在其他数据库中的工作方式
  • 大多数时候它只是工作。
于 2011-04-13T13:51:29.930 回答