INSERT ... SELECT的文档页面指出,INSERT ... SELECT要使用复制,ORDER BY必须使用一些列,以便可以以可预测的顺序插入行,因此自动增量列将正常工作。
这让我想知道......当你做一个ORDER BY并且你选择的列是非唯一的时,MySQL 用什么来决定进一步的排序?它必须是确定性的,否则文档会说您需要选择一个ORDER BY唯一的列,是吗?还是文档有误?
INSERT ... SELECT的文档页面指出,INSERT ... SELECT要使用复制,ORDER BY必须使用一些列,以便可以以可预测的顺序插入行,因此自动增量列将正常工作。
这让我想知道......当你做一个ORDER BY并且你选择的列是非唯一的时,MySQL 用什么来决定进一步的排序?它必须是确定性的,否则文档会说您需要选择一个ORDER BY唯一的列,是吗?还是文档有误?
如果您对所有匹配行都没有不同值的列使用 ORDER BY,则顺序是不确定的,是的。
如果插入的顺序很重要,这确实会破坏基于语句的复制。如果您在目标表中使用 auto_increment 列,则插入的顺序当然很重要,但通常不会。
如果您对语句有限制(更新和删除),顺序也很重要。
但是,如果您使用基于行的复制,您几乎可以做任何您喜欢的事情,而不会破坏复制。至少,除非你真的尝试,否则不会。
这些规则非常复杂,我建议您始终对插入...选择使用完全确定的 ORDER BY,或使用 LIMIT 进行更新。
基于行的复制也是您的朋友。我在生产中并没有真正使用它,但了解