2011-01-07 9 views
1

uidという自動インクリメント整数フィールドを既存のテーブルassocに追加したいと思いますが、それが主キーでないとできないように見えます。sqlite:どのようにして既存のテーブルに自動インクリメントIDを追加できますか?

ように、私は私が重複する主キーをINSERT OR IGNORE INTO assocを取得しないことができるように、私は主キーとして列のペアを持っている場合は、その私は、既存の主キーのペアのフィールドlocal_idremote_idを持っている、と私は、私はそれらをアップデート(see other SO question)として使用することはできません。

私は私が必要とする動作を得ることができるように、誰もがテーブルを再構築(およびALTER TABLEを使用して再構築することを実装)する方法をお勧めでした:

  • 単一自動インクリメントキーを、私はUPDATE
  • のためにそれを使用することができます
  • フィールドlocal_idremote_idのペアペア(local_id, remote_id)はこの場合、表に
+0

私はあなたの他の質問に答えを掲載しました。 –

答えて

1

ユニーク残るように、あなたはPをドロップする可能性が既存の列の派生キーを作成し、新しい主キー整数の自動インクリメント列を作成し、他の2つの列にUNIQUE索引を作成します。

+0

クール、良い選択肢です。ねえ、組み込みのROWIDがある場合、なぜ私はオートインクリメントプライマリキーが必要なのでしょうか? –

+1

ドキュメントを正しく理解している場合、INTEGER PRIMARY KEYを宣言すると、ROWIDの値のエイリアスになります。 INTEGER PRIMARY KEY AUTOINCREMENTを明示的に宣言すると、わずかに異なる(より安全な)動作になります。マニュアルページはhttp://www.sqlite.org/autoinc.htmlです。 –

0

ああ、私はする必要はありません - 内蔵rowidの列があります。

+0

最初の項目が削除された場合、ROWIDが新しい項目に再割り当てされる可能性があるため、ROWIDを使用して他の表にリンクすることはお勧めしません – Kevin

関連する問題