SQLiteデータで列を変更し、既存の列にUNIQUE制約を追加

1307 ワード

UNIQUE制約
UNIQUE制約は、1つの特定のカラムに2つのレコードが同じ値を持つことを防止します.COMPANY表では、たとえば2人以上の人が同じ年齢になるのを防ぐことができます.
たとえば、次のSQLite文は、新しいテーブルCOMPANYを作成し、5つのカラムを追加します.ここで、AGE列はUNIQUEに設定されているので、同じ年齢の記録は2つもありません.
CREATE TABLE COMPANY(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL UNIQUE,
   ADDRESS        CHAR(50),
   SALARY         REAL    DEFAULT 50000.00);

ただし、既存のテーブルの列を変更する場合は、既存の列にUNIQUE制約を追加するにはどうすればいいですか?
SQLiteはALTER TABLEの有限サブセットをサポートする.SQLiteでは、ALTER TABLEコマンドを使用して、ユーザーがテーブルの名前を変更したり、既存のテーブルに新しいカラムを追加したりできます.カラムの名前を変更したり、カラムを削除したり、テーブルからコンストレイントを追加または削除したりすることはできません.したがって、通常のsql:一意インデックスの追加(制約):alter tableテーブル名add unique(フィールド名1[,フィールド名2,...])を使用します.UNIQUE文を追加することはできません.どうしよう?
SQliteの公式サイトを検索するには、他の代替方法があります.
方法1:一意のインデックスを作成することによって代替
ユニークインデックス
ユニークなインデックスを使用するのは、パフォーマンスだけでなく、データの整合性のためです.ユニークインデックスでは、重複する値をテーブルに挿入することはできません.基本構文は次のとおりです.
CREATE INDEX index_name
on table_name (column_name);

方法2:元の列を削除し、uniqueコンストレイント付きの新しい列を作成する
CREATE TABLE COMPANY(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL UNIQUE,
   ADDRESS        CHAR(50),
   SALARY         REAL    DEFAULT 50000.00);