2011-02-13 79 views
0

我試圖合併具有相同表(和模式)的幾對SQLite3數據庫。有些表格非常簡單,只有一些明文數據,但有些表格有主鍵。有些密鑰是唯一的,如URL(例如url LONGVARCHAR PRIMARY KEY),其中一些只是簡單的整數索引,但未設置爲自動增量(例如id INTEGER PRIMARY KEY)。將行添加到主鍵可能已存在的SQLite數據庫中

我發現了幾個關於合併數據庫的主題(而且我已經手動合併了一對非主鍵數據庫而不費力),但是我擔心這兩個主鍵可能已經存在。

我的問題是,如果一行被插入到一個數據庫中已經存在一個具有相同密鑰的行,會發生什麼?它應該覆蓋具有該鍵的行嗎?我希望它會將它們追加到表中並更新密鑰,但只有當密鑰的數字組件設置爲自動遞增正確時纔有效?

任何人都可以確認我的假設 - 如果可能的話,提供一個最簡單的方法來追加這樣的行的建議?

非常感謝。

回答

0

如果你嘗試插入一個重複的主鍵,它會給你一個錯誤,不允許插入。 SQLite也支持'REPLACE INTO'語法,它將在一個重複的主鍵上進行更新。

如果你想附加重複項,你將不得不檢查一個帶有該項的字段是否已經存在,如果是,那麼將該項改爲一個新的值。正確的做法可能取決於您的應用程序。對於整數鍵,你可以採取最大+ 1,但對於url鍵,不清楚正確的行爲應該是什麼。

+0

對;當鍵存在時插入失敗,但更新覆蓋該行 - 爲什麼沒有APPEND命令? `:-(`對於URL鍵,它主要是用最新數據庫中的同一行更新行。是否有一種方法可以自動執行max + 1方法?我正在使用SQLite3命令行程序;是 – Synetech 2011-02-13 06:52:12

+0

有*是*一個APPEND語句;我們稱之爲INSERT。鍵是你的朋友 – 2011-02-13 12:57:25

1

如果您將目標表中的主鍵設置爲自動增量,您應該沒有問題。

因此,當你做了批量插入命令或者你正在用來向新表中插入值的任何東西時,你根本就不提供主鍵字段的輸入,也不會重複。

列:

ID名稱

只是不提供ID字段,即/

INSERT INTO表名( 「Synetech」)

插入只想用這種添加表中下一個可用的ID索引。

祝你好運!

相關問題