2013-08-09 11 views
5

私は "SectionDetails"という名前のテーブルを作成したデータベースを持っています。 このテーブルで私はAUTOINCREMENT property.Andと主キーとして "ID"を設定し、私はこのテーブルに自分のデータを挿入しています。sqliteの「挿入または置き換え」はAUTOINCREMENTの主キーで動作しますか?

しかし、私はレコードが存在するかどうかを確認する必要があるシナリオに来ました(レコードが存在する場合は同じ値で置き換えるかスキップします)。 1 )。

しかし、私は同じ列の値を持つレコードを挿入しようとすると、プライマリキーを増やし、置き換えるのではなく同じ行を挿入します。

私の質問は です。sqliteの「挿入または置き換え」はAUTOINCREMENTプライマリキーで動作しますか?

私は次のクエリを使用しています:

insert or replace into SectionDetails(Name,Month,Title,Url)values('Deepak',"August","None","www.dd619.com") 

ここ列「ID」AUTOINCREMENTプロパティとその理由は主キーが表示されていません。

答えて

8

短い答え:いいえ、それはしません。

「挿入または置き換え」は、主キーも指定した場合にのみ有効です。あなたが記述した設定での自動インクリメントでは、これは機能しません。

これを行う最も簡単な方法は、使用法のカスタム挿入/更新メソッドを作成することです。

15

この作業を行うには、他の列にいくつかの一意の制約を追加する必要があります。さらにIDを変更する必要があります。

insert or replaceは、実際にはinserton conflict replaceの競合解決戦略です。つまり、挿入がいくつかの制約に違反すると、すべての競合する行が最初に削除され、挿入が行われます。 autoincrementメカニズムが新しいID値を生成します。詳細については

http://www.sqlite.org/lang_conflict.html

+0

本当に素敵な答え – Ata

関連する問題