MySQLの方言:H2データベースで列挙型を置き換えるには?
CREATE TABLE My_Table (my_column enum ('first', 'second', ... 'last'));
H2方言:
CREATE TABLE My_Table (my_column ? ('first', 'second', ... 'last'));
すぎH2でのMySQLからenum
型等価である何種類?
MySQLの方言:H2データベースで列挙型を置き換えるには?
CREATE TABLE My_Table (my_column enum ('first', 'second', ... 'last'));
H2方言:
CREATE TABLE My_Table (my_column ? ('first', 'second', ... 'last'));
すぎH2でのMySQLからenum
型等価である何種類?
これはあなたが探しているものであれば、私はわからないんだけど、あなたは何ができるだろうが、チェック制約を使用です:
CREATE TABLE My_Table(my_column varchar(255)
check (my_column in ('first', 'second', 'last')));
-- fails:
insert into My_Table values('x');
-- ok:
insert into My_Table values('first');
これはH2、Apache Derbyの、PostgreSQLの、HSQLDB、およびに動作しますSQLiteさえ。私は他のデータベースをテストしなかった。
ありません。それでも、enum
はいずれの場合でも最適な解決策ではありません。参照表を使用するだけです。
+1は "enumは素晴らしい解決策ではありません" –
私はこの問題に遭遇し、別のテーブルと外部キー制約を作成して解決しました。
あなたはそれはあなたが挿入している値がMy_Enum_Table
であることを確認するために、外部キーチェックを行います
My_Table
に
INSERT
をしようとする方法
CREATE TABLE My_Enum_Table (
my_column varchar(255) UNIQUE
);
INSERT INTO My_Enum_Table (my_column)
VALUES
('First'),
('Second'),
...
('Last');
CREATE TABLE My_Table (
my_column varchar(255),
FOREIGN KEY (my_column) REFERENCES My_Enum_Table (my_column)
);
。
はここにかかわらず、いくつかのトレードオフがあります。
ENUM
と同じように対話することができます。ENUM
よりも遅くなります。現実的には、テーブルの行数がかなり少なくなければならないが、これはおそらくごくわずかである。 My_Table.my_column
にインデックスを追加すると、これが役に立ちます。INNODB
などの外部キーをサポートするエンジンを使用する必要もあります。私はこれが本当にコンですが、私はそれが特別なニーズを持つ人のためかもしれないと思うかどうかは分かりません。H2は、列挙型があるように見える:http://www.h2database.com/html/datatypes.html#enum_type
だから、まったく同じ構文が動作するはずですが。 (私はどのようにセマンティクスが一致するかわかりません。)
現在、[バージョン1.4.195 **の時点で、2017-04-23にリリースされました](http://www.h2database.com/html/changelog.html)はサポートされていますが、その質問は書かれました。たぶんあなたはあなたの答えを明確にしたいでしょう。 –
アップグレードH2瓶
H2のMavenのリポジトリ: https://mvnrepository.com/artifact/com.h2database/h2
ジャーバージョン:
1.4.196中央(6月、2017年) - 列挙のサポート(テスト)
1.4。 192セント(2016年5月) - 列挙型サポートの欠如(テスト済み)
ところで、列挙型と参照テーブルがより効率的である可能性があります。 –
この解決策では可能な値を列挙する方法がない(彼は必要ないかもしれないが)。 – Viruzzo
可能な値がわからないということですか?どのようにenumを使うことができますか?あなたの例は正しいですか? –