10.2 テーブル構造とスキーマ
VOLATILEテーブルのPRIMARY KEY設計とスキーマ構成を説明します。
PRIMARY KEYの設計
VOLATILEテーブルはPRIMARY KEYなしでも作成できます。
ただし、PKによる検索やON DUPLICATE KEY UPDATEを使用するにはPRIMARY KEYが必要です。
単一のPRIMARY KEY
CREATE VOLATILE TABLE ch10_schema_state (
device_id VARCHAR(32) PRIMARY KEY,
state VARCHAR(16),
updated_at DATETIME
);複合キーが必要な場合
複数列の組み合わせで行を一意に識別する必要がある場合は、組み合わせたキーを別のPRIMARY KEY列に格納します。
CREATE VOLATILE TABLE ch10_schema_hourly (
key_id VARCHAR(96) PRIMARY KEY,
sensor_id VARCHAR(64),
hour_ts DATETIME,
avg_value DOUBLE,
sample_cnt INTEGER
);
-- 組み合わせキーの挿入
INSERT INTO ch10_schema_hourly
VALUES ('TEMP-01:2026010110', 'TEMP-01', TO_DATE('2026-01-01 10:00:00', 'YYYY-MM-DD HH24:MI:SS'), 23.5, 60);
INSERT INTO ch10_schema_hourly
VALUES ('TEMP-01:2026010111', 'TEMP-01', TO_DATE('2026-01-01 11:00:00', 'YYYY-MM-DD HH24:MI:SS'), 24.1, 60);
INSERT INTO ch10_schema_hourly
VALUES ('TEMP-02:2026010110', 'TEMP-02', TO_DATE('2026-01-01 10:00:00', 'YYYY-MM-DD HH24:MI:SS'), 21.0, 60);
-- 組み合わせキーの検索
SELECT sensor_id, avg_value FROM ch10_schema_hourly
WHERE key_id = 'TEMP-01:2026010110';ON DUPLICATE KEY UPDATEとの併用
-- PRIMARY KEY重複時にUPDATEを実行
INSERT INTO ch10_schema_state VALUES ('DEV-01', 'ONLINE', NOW)
ON DUPLICATE KEY UPDATE SET state = 'ONLINE', updated_at = NOW;注意事項
- PRIMARY KEYなしでも作成できますが、PKに基づく操作(UPSERT、PK検索など)は使用できません。
- 同じPRIMARY KEYを持つ行を複数保存することはできません。
ON DUPLICATE KEY UPDATEは、 重複行を追加する代わりに既存行を更新します。 - PRIMARY KEY列は1つだけ指定します。
VOLATILEテーブルの設計
VOLATILEテーブルはデータをメモリだけに保持し、サーバー再起動時にデータが消失します。 テーブル定義は残るため、設計では「何を失ってもよいか」と「どのように再充填するか」を決めます。 複数セッションで共有し、再起動後に復旧する必要がない状態やキャッシュに使用します。
スキーマを決めるときは、次の項目も検討してください。
このページの実習テーブルは、次のように削除します。
DROP TABLE ch10_schema_hourly;
DROP TABLE ch10_schema_state;最終更新日