我有2個sqlite的文件,一個是年紀大了,另外一個有一些新的數據進行比較,以第一個。 是否有可能將2個sqlite文件與任何單個命令進行比較,如果有任何區別,是否需要更新?是否有可能比較2個sqlite的文件和更新
歡迎任何評論
感謝
我有2個sqlite的文件,一個是年紀大了,另外一個有一些新的數據進行比較,以第一個。 是否有可能將2個sqlite文件與任何單個命令進行比較,如果有任何區別,是否需要更新?是否有可能比較2個sqlite的文件和更新
歡迎任何評論
感謝
沒有單一的命令。但有一些SQLite DB comparision tools。你可以自己實現類似的功能。我看到兩種基本方法。
SQL方式。打開X數據庫,然後附加到Y數據庫。使用SELECT ... FROM X.sqlite_master獲取X數據庫的表列表。遍歷列表並執行查詢:
SELECT * FROM x.tab
EXCEPT
SELECT * FROM y.tab
UNION ALL
SELECT * FROM y.tab
EXCEPT
SELECT * FROM x.tab
這將返回每個表的表內容差異。現在,對於此查詢返回的每一行,您都可以執行REPLACE SQL命令。
工具的方式。相當有趣,但這種方法也可用於手動同步。使用SQLite.exe工具。打開其中的X數據庫並執行.output和.dump命令。對X數據庫重複相同的操作。使用Beyond Compare等工具來比較兩個輸出。
感謝您編寫「SQL方式」代碼。但實際上,我猜這對於大表來說會比較慢,因爲所有數據都將從兩個表中多次檢索(至少四次),然後使用默認歸類逐列比較。請參閱http://www.sqlite.org/lang_select.html – 2011-01-15 13:52:49
你可以指望的行數,以確定他們是否是不同的,但是,它是不平凡的,以決定如何更新「舊的一個」。既然你有機會獲得這兩個文件,最簡單的方法,海事組織,如果你只想讓舊錶一樣的新的一個是:
1)計算行數。如果舊<新:那麼: 2)截斷舊錶 3)選擇新表中的所有行並將它們插入到舊錶中。
如果你只處理行數的變化,你不會處理行內容修改。如果有任何UPDATE語句已經運行,您將放棄更改。所以恕我直言不是一個好的解決方案 – 2011-01-14 06:45:26
這樣的功能沒有直接的命令。
你可以使用一個觸發器,然後進行包含所有的修改(INSERT/UPDATE/DELETE)對數據庫進行的「日記」一個單獨的列表,然後運行它不服老。
但是,如果您沒有任何安裝這種觸發器的可能性,則必須讀取所有文件行,然後測試舊錶中的新行是否相同,然後創建UPDATE/INSERT /刪除。
第2解決方案將慢死了:你必須閱讀所有的新內容,然後搜索舊錶的每一行的內容。
所以對於一個快速的解決方案,我只看到了三種可能性:
對於快速二進制比較,在our source code repository中有一個德爾福優化單元(也是FOSS)。
誰做了這個-1沒有任何評論? ;) – 2011-01-18 11:15:44
我想你想要的是二元差異。看看[這個答案](http://stackoverflow.com/questions/4580368/how-can-i-diff-2-sqlite-files) – bpercevic 2015-02-11 20:18:21