MySQL方言:
CREATE TABLE My_Table ( my_column enum ('first', 'second', ... 'last'));
字符串H2方言:
CREATE TABLE My_Table ( my_column ? ('first', 'second', ... 'last'));
型H2中的什么类型与MySQL中的enum类型等价?
enum
wbrvyc0a1#
我不确定这是不是你要找的,但是你可以做的是使用一个检查约束:
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中工作。
camsedfj2#
没有;尽管如此,enum在任何情况下都不是一个很好的解决方案,只是使用一个引用表。
35g0bw713#
看起来H2有枚举:http://www.h2database.com/html/datatypes.html#enum_type因此,应该使用完全相同的语法(我不知道语义匹配的程度如何)。
flvlnr444#
升级h2罐H2 maven存储库:https://mvnrepository.com/artifact/com.h2database/h2jar版本:1.4.196 Central(2017年6月)- enum支持(已测试)1.4.192 Central(2016年5月)-缺乏枚举支持(也进行了测试)
ruarlubt5#
我遇到了这个问题,并通过创建一个单独的表和外键约束来解决它。
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) );
字符串这样,当你尝试在My_Table中插入INSERT时,它会进行外键检查,以确保你插入的值在My_Enum_Table中。但这里有一些权衡:
My_Table
INSERT
My_Enum_Table
ENUM
My_Table.my_column
INNODB
1wnzp6jl6#
H2现在支持这一点,您可以创建一个带有枚举列的表,甚至在需要时更改枚举。
CREATE TABLE example ( "example" TEXT, "state" ENUM ( 'CREATED', 'DELETED' ) ); ALTER TABLE example ALTER COLUMN "state" ENUM ( 'CREATED', 'USED', 'DELETED' );
字符串
6条答案
按热度按时间wbrvyc0a1#
我不确定这是不是你要找的,但是你可以做的是使用一个检查约束:
字符串
这将在H2、Apache Derby、PostgreSQL、HSQLDB甚至SQLite中工作。
camsedfj2#
没有;尽管如此,
enum
在任何情况下都不是一个很好的解决方案,只是使用一个引用表。35g0bw713#
看起来H2有枚举:http://www.h2database.com/html/datatypes.html#enum_type
因此,应该使用完全相同的语法(我不知道语义匹配的程度如何)。
flvlnr444#
升级h2罐
H2 maven存储库:https://mvnrepository.com/artifact/com.h2database/h2
jar版本:
1.4.196 Central(2017年6月)- enum支持(已测试)
1.4.192 Central(2016年5月)-缺乏枚举支持(也进行了测试)
ruarlubt5#
我遇到了这个问题,并通过创建一个单独的表和外键约束来解决它。
字符串
这样,当你尝试在
My_Table
中插入INSERT
时,它会进行外键检查,以确保你插入的值在My_Enum_Table
中。但这里有一些权衡:
ENUM
一样与它交互。ENUM
慢,因为它必须进行表查找。实际上,由于表应该具有合理的少量行数,这可能是相当可以忽略的。为My_Table.my_column
添加索引可能会有所帮助。INNODB
。我不确定这是否真的是一个骗局,但我想它可能是为有特殊需求的人准备的。1wnzp6jl6#
H2现在支持这一点,您可以创建一个带有枚举列的表,甚至在需要时更改枚举。
字符串