如何在 SQLite 中创建 ENUM 类型?
我需要将表从 MySQL 转换为 SQLite,但我不知道如何转换枚举字段,因为我在 SQLite 中找不到 ENUM
类型。
上述字段是下表中的 pType
:
CREATE TABLE `prices` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`pName` VARCHAR(100) NOT NULL DEFAULT '',
`pType` ENUM('M','R','H') NOT NULL DEFAULT 'M',
`pField` VARCHAR(50) NULL DEFAULT NULL,
`pFieldExt` VARCHAR(50) NULL DEFAULT NULL,
`cmp_id` INT(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
)
ENGINE=MyISAM
ROW_FORMAT=DEFAULT
我需要一个只有三个值的字段供用户选择,并且我想在数据库中强制执行该字段,而不仅仅是在我的应用程序中。
I need to convert a table from MySQL to SQLite, but I can't figure out how to convert an enum field, because I can't find ENUM
type in SQLite.
The aforementioned field is pType
in the following table:
CREATE TABLE `prices` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`pName` VARCHAR(100) NOT NULL DEFAULT '',
`pType` ENUM('M','R','H') NOT NULL DEFAULT 'M',
`pField` VARCHAR(50) NULL DEFAULT NULL,
`pFieldExt` VARCHAR(50) NULL DEFAULT NULL,
`cmp_id` INT(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
)
ENGINE=MyISAM
ROW_FORMAT=DEFAULT
I need a field with only three values for the user to chose, and I would like to enforce that in the DB, not just in my application.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
SQLite 方法是使用 CHECK 约束。
一些示例:
这会将
pType
列限制为仅值M
、R
和H
,仅就像
enum("M", "R", "H")
在其他一些 SQL 引擎中会做的那样。SQLite way is to use a CHECK constraint.
Some examples:
This will limit the
pType
column to just the valuesM
,R
, andH
, justlike
enum("M", "R", "H")
would do in some other SQL engines.SQLite 中没有枚举类型,只有以下类型:
来源: http://www.sqlite.org/datatype3 .html
恐怕您的情况需要一个小的自定义枚举表。
There is no enum type in SQLite, only the following:
Source: http://www.sqlite.org/datatype3.html
I'm afraid a small, custom enum table will be required in your case.
为了扩展 MPelletier 的答案,您可以像这样创建表:
现在,枚举值可以直接在 Price 表中使用,因为它们将使用 ENUM:您不需要加入 PriceType 表来获取 Type 值,仅当您想确定 ENUM 的顺序时才需要使用它。
外键约束是在 SQLite 3.6.19 版本中引入的。
To expand on MPelletier’s answer, you can create the tables like so:
Now the enumeration values are available directly in the Price table as they would be using an ENUM: you don’t need to join to the PriceType table to get the Type values, you only need to use it if you want to determine the sequence of the ENUMs.
Foreign key constraints were introduced in SQLite version 3.6.19.