Как создать тип перечисления в SQLite?
мне нужно преобразовать таблицу из MySQL в SQLite, но я не могу понять, как преобразовать поле enum, потому что я не могу найти 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.