Мне нужно преобразовать таблицу из 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
Мне нужно поле с тремя значениями для пользователя, и я хотел бы применить это в БД не только в моем приложении.
В SQLite нет типа перечисления, только следующее:
Источник: http://www.sqlite.org/datatype3.html
Я боюсь, что в вашем случае будет небольшая пользовательская таблица enum.
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'
)
Для других, приходящих к этому в будущем, чтобы расширить ответ на MPelletiers, вы можете создать таблицы как:
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 были введены ограничения внешнего ключа.
INSERT INTO PriceType(Type, Seq) VALUES ('M',1), ('R',2), ('H',3);
Должен получить синтаксическую ошибку. «Первая форма (с ключевым словом« VALUES ») создает одну новую строку в существующей таблице». : sqlite.org/lang_insert.html . Разбейте его, избегайте этого: INSERT INTO PriceType(Type, Seq) VALUES ('M',1); INSERT INTO PriceType(Type, Seq) VALUES ('R',2); INSERT INTO PriceType(Type, Seq) VALUES ('H',3);