コンテンツにスキップ

9.3 作成、変更、削除

LOOKUPテーブルの作成、変更、削除方法を説明します。

LOOKUPテーブルの作成と管理

参照テーブルの作成方法は次のとおりです。LOOKUPテーブルには必ずPRIMARY KEYを指定します。

LOOKUPテーブルの作成

CREATE LOOKUP TABLE ch9_ddl (id INTEGER PRIMARY KEY, name VARCHAR(20));

運用で使用するマスターデータには、意味の明確な列名を定義します。

CREATE LOOKUP TABLE ch9_ddl_equip (
    equip_id   LONG PRIMARY KEY,
    equip_name VARCHAR(128),
    location   VARCHAR(64),
    status     VARCHAR(16),
    updated_at DATETIME
);

PRIMARY KEYは行を一意に識別し、UPDATE、DELETE、JOINの基準になります。 複数列の組み合わせが業務キーの場合は、結合した文字列を別のキー列にするか、SEQUENCEによる代理キーを使用します。

CREATE LOOKUP TABLE ch9_ddl_price (
    price_key  VARCHAR(64) PRIMARY KEY,
    product_id VARCHAR(32),
    region     VARCHAR(16),
    price      DOUBLE
);

AUTO_INCREMENT PRIMARY KEY

サーバーが数値PRIMARY KEYを生成する場合は、単一のLONGまたはINT64列にAUTO_INCREMENTを指定します。

CREATE LOOKUP TABLE ch9_ddl_registry (
    equip_id   LONG PRIMARY KEY AUTO_INCREMENT,
    equip_name VARCHAR(128),
    location   VARCHAR(64)
);

INSERT INTO ch9_ddl_registry(equip_name, location)
VALUES ('compressor-01', 'SEOUL-A');

PK列を省略するかNULLを指定すると、サーバーが値を生成します。 単一のINSERT ... VALUESでは、0..INT64_MAX範囲のPK値を直接指定することもできます。 指定値が現在の次の自動値以上なら、次の自動値は指定値 + 1に進み、小さい値を指定しても戻りません。 データと次の自動値は、正常な再起動後も保持されます。

AUTO_INCREMENTを使用するLOOKUPテーブルでは、INSERT ... SELECTON DUPLICATE KEY UPDATEは使用できません。 SDKでINSERT結果のIDを取得する方法は、ROWIDとINSERT結果IDを参照してください。

SEQUENCE列の使用

自動増分番号が必要なら、LONG PROPERTY(SEQUENCE=1)列を使用します。 入力時はNEXTVAL()関数で次の値を取得します。

CREATE LOOKUP TABLE ch9_ddl_alarm (
    seq         LONG PROPERTY(SEQUENCE=1) PRIMARY KEY,
    sensor_id   VARCHAR(64),
    alarm_type  VARCHAR(32),
    occurred_at DATETIME,
    message     VARCHAR(256)
);

INSERT INTO ch9_ddl_alarm
VALUES (NEXTVAL(seq), 'TEMP-01', 'HIGH', NOW, '온도 초과');

SEQUENCE列の詳細なポリシーは、SEQUENCE列で説明します。 PROPERTY(SEQUENCE)AUTO_INCREMENTは別の機能であり、同じ列に併用しません。

列の追加と削除

Standard Editionでは、LOOKUPテーブルに固定長の数値ARRAY列を追加・削除できます。

ALTER TABLE ch9_ddl_equip
    ADD COLUMN (limits DECIMAL(12,4)[2] DEFAULT [0.0000, NULL]);

ALTER TABLE ch9_ddl_equip
    DROP COLUMN (limits);

DEFAULTがなければ、既存行の新しいARRAY列は列全体がNULLになります。 DEFAULTを指定すると、既存行にもその値を適用します。 ARRAY DEFAULTの要素数は、宣言した要素数と正確に一致する必要があります。 ARRAY列はPRIMARY KEYやインデックスキーには使用できません。

サポート型と制約は、数値ARRAY型を参照してください。

インデックスの追加

頻繁に検索する列やJOIN条件に使用する列には、インデックスを追加します。

CREATE INDEX ch9_ddl_loc_idx ON ch9_ddl_equip(location);
CREATE INDEX ch9_ddl_status_idx   ON ch9_ddl_equip(status);

PRIMARY KEY列には標準のインデックスが作成されるため、同じ列に別のインデックスを重複作成しません。 インデックスが多いと入力と更新のコストが増えるため、検索条件が明確な列だけに追加します。

データ削除とテーブル削除

行を削除するにはDELETE文を使用します。単一行の削除には、PK条件を使用する方法が最も明確です。

DELETE FROM ch9_ddl_equip
WHERE equip_id = 1001;

一括削除では一般条件式を使用できます。 本番データでは、先に同じ条件で対象件数を確認してください。

SELECT COUNT(*)
FROM ch9_ddl_equip
WHERE status = 'RETIRED';

DELETE FROM ch9_ddl_equip
WHERE status = 'RETIRED';

テーブル自体を削除するには、DROP TABLEを使用します。

DROP TABLE ch9_ddl_alarm;
DROP TABLE ch9_ddl_registry;
DROP TABLE ch9_ddl_price;
DROP TABLE ch9_ddl_equip;
DROP TABLE ch9_ddl;

DROP TABLEはテーブル定義とデータを両方削除します。 必要に応じて、削除前にバックアップまたはエクスポートを行ってください。

注意事項

  • LOOKUPテーブルにはPRIMARY KEYが必須です。
  • PRIMARY KEY列は1つだけ指定します。
  • PRIMARY KEY値を変更する場合は、既存行を削除してから新しいキーで挿入します。
  • マスターデータが大きくなり、検索・更新パターンが複雑になったら、TRANSACTIONテーブルを検討します。
最終更新日