H2 Databaseでの主キー生成、ユニークインデックス生成について
H2 databaseでの主キー生成、ユニークインデックス生成について調べる機会があったので
備忘のためにまとめてみました。
以下のようなテーブルを例として、主キー、ユニークインデックスの生成、削除、定義確認の
SQLを列挙しています。
なお、記述したSQLの大文字部分はH2の予約語になります。
CREATE TABLE IF NOT EXISTS multi_keys( id INT(10) DEFAULT 0 NOT NULL AUTO_INCREMENT, id2 INT(10) DEFAULT 0 NOT NULL, unique_id INT(10) DEFAULT 0 NOT NULL, real_value REAL DEFAULT 0 NOT NULL, com VARCHAR(200), test_date DATE DEFAULT CURRENT_DATE(), update_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP() );
主キーの生成、削除のSQLは以下のようになります。
ちなみに、CONSTRAINT_NAMEは指定した名称が割り当てられるのですが、
INDEX_NAMEとしては「PRIMARY_KEY_6」のような自動生成された名称になります。
INDEX_NAMEに任意の名称をつける方法は分かりませんでした。
・生成 ALTER TABLE multi_keys ADD CONSTRAINT multi_leys_pk PRIMARY KEY(id, id2); ・削除 ALTER TABLE multi_keys DROP PRIMARY KEY; ・定義確認 SELECT * FROM INFORMATION_SCHEMA.CONSTRAINTS /* 制約情報 */ ORDER BY TABLE_NAME, CONSTRAINT_NAME; SELECT * FROM INFORMATION_SCHEMA.INDEXES /* インデックス情報 */ ORDER BY TABLE_NAME, INDEX_NAME, ORDINAL_POSITION;
主キーとは別にユニークインデックスを張るには以下のようになります。
・生成 CREATE UNIQUE INDEX IF NOT EXISTS multi_keys_idx ON multi_keys (unique_id); ・削除 DROP INDEX multi_keys_idx; ・定義確認 SELECT * FROM INFORMATION_SCHEMA.INDEXES /* インデックス情報 */ ORDER BY TABLE_NAME, INDEX_NAME, ORDINAL_POSITION;