134 votes

Comment créer un type ENUM dans SQLite?

J'ai de la table dans mysql défini comme

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 de cette table converti dans SQLite, mais je ne peux pas convertir champ pType parce que je peux pas trouver le type ENUM dans SQLite. Peut-on aider avec cela? J'ai besoin d'un champ avec seulement 3 valeurs pour que l'utilisateur a choisi, et je voudrais éviter le contrôle de ma demande.

Merci à l'avance...

152voto

mateusza Points 1452

SQLite façon

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

101voto

MPelletier Points 8326

Il n'y a pas de type enum dans SQLite, seuls les éléments suivants:

  • NULL
  • ENTIER
  • RÉEL
  • TEXTE
  • BLOB

Source: http://www.sqlite.org/datatype3.html

J'ai peur d'un petit personnalisée enum table seront nécessaires dans votre cas.

65voto

ChrisV Points 1832

Pour les autres à venir à ce sujet dans l'avenir, de s'étendre sur MPelletier réponse, vous pouvez créer des tables en tant que:

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

Fait de cette manière, les valeurs d'énumération sont disponibles directement dans le tableau de Prix, comme ils le seraient à l'aide d'un ENUM: vous n'avez pas besoin de se joindre à la PriceType tableau pour les valeurs de Type, vous avez seulement besoin de l'utiliser si vous souhaitez déterminer la séquence des ENUMs.

Les contraintes de clés étrangères ont été introduites dans SQLite version 3.6.19.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X