one*_*com 92 sqlite enums types
我需要将一个表从MySQL转换为SQLite,但我无法弄清楚如何转换枚举字段,因为我ENUM
在SQLite中找不到类型.
上述字段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
Run Code Online (Sandbox Code Playgroud)
我需要一个只有三个值的字段供用户选择,我想在DB中强制执行,而不仅仅是在我的应用程序中.
mat*_*sza 84
SQLite的方式
CREATE TABLE prices (
id INTEGER PRIMARY KEY,
pName TEXT CHECK( LENGTH(pName) <= 100 ) NOT NULL DEFAULT '',
pType TEXT CHECK( pType IN ('M','R','H') ) NOT NULL DEFAULT 'M',
pField TEXT CHECK( LENGTH(pField) <= 50 ) NULL DEFAULT NULL,
pFieldExt TEXT CHECK( LENGTH(pFieldExt) <= 50 ) NULL DEFAULT NULL,
cmp_id INTEGER NOT NULL DEFAULT '0'
)
Run Code Online (Sandbox Code Playgroud)
MPe*_*ier 75
SQLite中没有枚举类型,只有以下内容:
资料来源:http://www.sqlite.org/datatype3.html
我担心在你的情况下需要一个小的,定制的枚举表.
Chr*_*isV 50
要扩展MPelletier的答案,您可以像这样创建表:
CREATE TABLE Price (
PriceId INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
Name VARCHAR(100) NOT NULL,
Type CHAR(1) NOT NULL DEFAULT ('M') REFERENCES PriceType(Type)
);
CREATE TABLE PriceType (
Type CHAR(1) PRIMARY KEY NOT NULL,
Seq INTEGER
);
INSERT INTO PriceType(Type, Seq) VALUES ('M',1);
INSERT INTO PriceType(Type, Seq) VALUES ('R',2);
INSERT INTO PriceType(Type, Seq) VALUES ('H',3);
Run Code Online (Sandbox Code Playgroud)
现在,枚举值可直接在Price表中使用,因为它们将使用ENUM:您不需要连接到PriceType表来获取Type值,如果要确定序列值,则只需要使用它ENUM.
SQLite版本3.6.19中引入了外键约束.