重複の挿入を避ける必要のあるデータベースがあります。要件は次のとおり1列が一致する行のサブセットについてsqlのユニークな設定と挿入時の制約
、カラム1が一致する行のサブセットについて同じカラム2
を持っている任意の存在することができない、任意のものが存在することはできません同じ列3と4を持っています。
私はデータベースを作成するときにこれらの関係を設定する方法があります(テーブルを作成する)か、選択をしてから手動でこれらのチェックを手動で行う必要がありますテーブルに挿入しますか?
重複の挿入を避ける必要のあるデータベースがあります。要件は次のとおり1列が一致する行のサブセットについてsqlのユニークな設定と挿入時の制約
、カラム1が一致する行のサブセットについて同じカラム2
を持っている任意の存在することができない、任意のものが存在することはできません同じ列3と4を持っています。
私はデータベースを作成するときにこれらの関係を設定する方法があります(テーブルを作成する)か、選択をしてから手動でこれらのチェックを手動で行う必要がありますテーブルに挿入しますか?
実際には、列1と2を一意にする必要があります。また、列1,3と4を一意にする必要があります。したがって、テーブルを作成するときには、ユニークな2つの制約を使用することができます。
CREATE TABLE tbl (
col1 varchar(255),
col2 varchar(255),
col3 varchar(255),
col4 varchar(255),
CONSTRAINT uc_first UNIQUE(col1, col2),
CONSTRAINT uc_second UNIQUE(col1, col3, col4)
)
だけ
はあなたが挿入後すぐに戻って、あなたが言及したcontraintsに基づいて重複行を削除でした...ボールが転がり取得しますか?
Ugh ...それについて礼儀正しくしてください。はい、できます。しかし、そうすることは恐ろしく非効率です。 –
十分に公正。私はTodd Owenの答えからテーブルが作成されるときにCONSTRAINTが必要であることを知った。私はそれが創造の後に変更できると思います。マニュアルに戻る... – pavium
ありがとうございます。一つのことは、どの制約がsqliteでトリガされているかを知る方法はありますか? Googleでは、文字列比較(.IsSameAs( "SQLITE_CONSTRAINT [19]:カラム1,3,4は一意ではない)")を行う必要があると不平を言う人もいます。 Klunkyと思われる。 – max