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 进行更新。
基于行的复制也是您的朋友。我在生产中并没有真正使用它,但了解