Как создать тип перечисления в SQLite?

мне нужно преобразовать таблицу из 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

мне нужно поле только с тремя значениями для пользователя, и я хотел бы обеспечить это в БД, а не только в моем приложении.

3 ответов


в SQLite нет типа перечисления, только следующее:

  • NULL
  • целое
  • реальные
  • текст
  • BLOB

источник:http://www.sqlite.org/datatype3.html

боюсь, что в вашем случае потребуется небольшая пользовательская таблица перечислений.


SQLite way

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

чтобы развернуть ответ 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);

теперь значения перечисления доступны непосредственно в таблице цен, поскольку они будут использовать перечисление: вам не нужно присоединяться к таблице PriceType, чтобы получить значения типа, вам нужно только использовать ее, если вы хотите определить последовательность перечислений.

ограничения внешнего ключа были введены в SQLite версии 3.6.19.