0

Android アプリで sqlite を使用しており、2 つの一意の行の値でテーブルに挿入したいと考えています。例えば:

id| column1 | column2 | column3|
1.   1              2     3  
2.   2              3     4

固有の列 - COLUMN1 および COLUMN2

 INSERT OR REPLACE INTO HISTORY (id, column1, column2, column3) VALUES (null, 2, 3, 6);

ただし、1 番目と 2 番目の値がテーブル内で一意ではないため、このクエリは機能しません。

サンクス。

4

1 に答える 1

0

あなたの質問を理解したら、テーブルを作成するときにUNIQUE制約を使用してください。

CREATE TABLE History (
    _id INTEGER PRIMARY KEY,
    column1 INTEGER,
    column2 INTEGER,
    column3 INTEGER,
    UNIQUE (column1, column2));

次に、これらのINSERTステートメントを試してみると:

INSERT INTO History (column1, column2, column3) VALUES (2, 3, 0);
INSERT INTO History (column1, column2, column3) VALUES (2, 3, 6);

column12 つ目は、 andcolumn2が既に存在するため失敗します。

私の例で使用すると、2 番目のステートメントが最初のステートメントを置き換えることを理解してくださいINSERT OR REPLACE(例外はスローされません)。


しかし、どうすれば既存のテーブルにユニークを追加できますか?

通常ALTER TABLE、既存のテーブルに制約を追加するために使用しますが、SQLite ではこれが許可されていません... ただし、この制限を回避できます。

CREATE UNIQUE INDEX name ON History(column1, column2);
于 2012-10-17T20:01:49.197 に答える