11

「SectionDetails」という名前のテーブルを1つ作成したデータベースがあります。このテーブルでは、プロパティを持つ主キーとして「id」を設定しましたAUTOINCREMENT 。そして、このテーブルにデータを挿入しています。

ただし、挿入しているレコードが既に存在するかどうかを確認する必要があるシナリオになりました(レコードが存在する場合は、同じ値に置き換えるかスキップし、レコードが存在しない場合は新しいものを挿入します)。

しかし、同じ列の値でレコードを挿入しようとすると、主キーが増加し、置換する代わりに同じ行が再度挿入されます。

だから、私の質問 は - sqlite の「挿入または置換」は AUTOINCREMENT 主キーで動作しますか?

次のクエリを使用しています。

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

AUTOINCREMENTここでは、プロパティを持つ主キーであるため、列「id」は表示されません。

4

2 に答える 2

20

これを機能させるには、他の列にいくつかの一意の制約を追加する必要があります。それでも、ID が変更されます。

insert or replace実際にはinserton conflict replace競合解決戦略があります。つまり、挿入が何らかの制約に違反する場合、競合するすべての行が最初に削除され、その後に挿入が行われます。その後autoincrement、メカニズムによって新しい ID 値が生成されます。

詳細については、http ://www.sqlite.org/lang_conflict.html を参照してください。

于 2013-08-09T17:25:15.123 に答える
11

短い答え: いいえ、ありません。

「挿入または置換」は、主キーも指定した場合にのみうまく機能します。あなたが説明したセットアップの自動インクリメントでは、これは機能しません。

おそらく最も簡単な方法は、ユース ケースに合わせてカスタムの挿入/更新メソッドを作成することです。

于 2013-08-09T17:25:34.793 に答える