documentation page for INSERT ... SELECT表示INSERT ... SELECT
使用复制时,必须使用ORDER BY
某些列,以便可以按可预测的顺序插入行,因此自动增加列将功能正常。
这让我想知道......当你执行ORDER BY
并且你选择的列是非唯一的时,MySQL会用什么来决定进一步的排序?它必须是确定性的,否则文档会说您需要选择ORDER BY
唯一列,是吗?或者文档错了吗?
答案 0 :(得分:1)
如果您对一个列使用ORDER BY,而该列对所有匹配的行没有明确的值,那么该顺序是非确定的,是的。
如果插入的顺序很重要,这会打破基于语句的复制。如果在目标表中使用auto_increment列,插入的顺序肯定很重要,但通常不会这样。
如果您对声明有限制,订单也很重要(也可以更新和删除)。
但是,如果你使用基于行的复制,你可以做任何你喜欢的事情,而不是破坏复制。至少,除非你真的尝试,否则不会。
这些规则非常复杂,我建议你只需要在插入中使用完全确定的ORDER BY ...选择,或者使用LIMIT进行UPDATE。
基于行的复制也是你的朋友。我在制作中并没有真正使用它,但是明白了