Как создать тип перечисления в 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.