Je dois convertir une table de MySQL en SQLite, mais je ne vois pas comment convertir un champ enum, car je ne trouve pas le type ENUM
en SQLite.
Le champ susmentionné est pType
dans le tableau suivant:
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
J'ai besoin d'un champ avec seulement trois valeurs à choisir par l'utilisateur, et j'aimerais l'imposer dans la base de données, pas seulement dans mon application.
Il n'y a pas de type enum dans SQLite, seulement les suivants:
Source: http://www.sqlite.org/datatype3.html
Je crains qu'un petit tableau personnalisé ne soit requis dans votre cas.
La méthode SQLite consiste à utiliser un contrainte CHECK .
Quelques exemples:
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'
)
Ceci limitera la colonne pType
aux seules valeurs M
, R
et H
, tout comme enum("M", "R", "H")
le ferait dans certains cas. autres moteurs SQL.
Pour développer la réponse de MPelletier, vous pouvez créer les tableaux comme suit:
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);
Désormais, les valeurs d’énumération sont disponibles directement dans la table Price, comme si elles utilisaient un ENUM: vous n’avez pas besoin de vous joindre à la table PriceType pour obtenir les valeurs Type, vous devez uniquement l’utiliser si vous souhaitez déterminer la séquence de valeurs. les ENUM.
Les contraintes de clé étrangère ont été introduites dans SQLite version 3.6.19.