如何在SQLite中创buildENUMtypes?

我需要从MySQL到SQLite转换表,但我不知道如何转换枚举字段,因为我无法findENUMtypes在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 

我需要一个只有三个值的字段供用户select,我想在DB中强制执行,而不仅仅是在我的应用程序中。

在SQLite中没有枚举types,只有以下几点:

  • 空值
  • 整数
  • 真实
  • 文本
  • BLOB

来源: http : //www.sqlite.org/datatype3.html

恐怕你的情况下需要一个小的自定义枚举表。

对于未来的其他人来说,扩展MPelletier的答案,你可以创build表格为:

 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); 

像这样做,枚举值可以直接在Price表中使用,因为它们将使用ENUM:您不需要连接到PriceType表以获取Type值,只需要使用它就可以确定ENUM的顺序。

SQLite版本3.6.19中引入了外键约束。

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' )