簡體   English   中英

MySQL復制的INSERT…SELECT with ORDER BY

[英]MySQL Replication of INSERT… SELECT with ORDER BY

INSERT ... SELECT文檔頁面指出,要使INSERT ... SELECT與復制一起使用,必須使用ORDER BY某些列,以便可以按可預測的順序插入行,因此自動遞增的列將正確運行。

這讓我想知道...當您執行ORDER BY並且您選擇的列不唯一時,MySQL用什么來決定進一步的排序? 它必須是確定性的,否則文檔會說您需要選擇ORDER BY唯一列,是嗎? 還是文檔錯誤?

如果您將ORDER BY與沒有匹配的所有行都具有不同值的列一起使用,則順序不確定,可以。

如果插入的順序很重要,則這會中斷基於語句的復制。 如果在目標表中使用auto_increment列,則插入順序當然很重要,但通常不會如此。

如果語句上有一個LIMIT(也更新和刪除),則順序也很重要。

但是,如果您使用基於行的復制,則可以執行幾乎所有您喜歡的操作,而且不會中斷復制。 至少,除非您確實嘗試過,否則不要這樣做。


這些規則是如此復雜,以至於我建議您始終在插入...選擇或帶有LIMIT的更新上始終使用完全確定的ORDER BY。

基於行的復制也是您的朋友。 我並沒有在生產中真正使用過它,但是了解

  • 它與復制在其他數據庫中的工作方式更為相似
  • 在大多數情況下,它就是可行的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM