Pregunta ¿Cómo crear un tipo ENUM en SQLite?


Necesito convertir una tabla de MySQL a SQLite, pero no puedo entender cómo convertir un campo enum, porque no puedo encontrar ENUM escribe en SQLite.

El campo antes mencionado es pType en la siguiente tabla:

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

Necesito un campo con solo tres valores para que el usuario elija, y me gustaría hacer cumplir eso en la base de datos, no solo en mi aplicación.


75
2018-03-14 13:34


origen


Respuestas:


No hay ningún tipo de enumeración en SQLite, solo lo siguiente:

  • NULO
  • ENTERO
  • REAL
  • TEXTO
  • GOTA

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

Me temo que se necesitará una pequeña tabla de enumeración personalizada en su caso.


53
2018-03-14 15:52



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

57
2018-06-19 23:29



Para otros que vengan a esto en el futuro, para ampliar la respuesta de MPelletier, puede crear las tablas como:

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

Hecho así, los valores de enumeración están disponibles directamente en la tabla de precios, ya que usarían un ENUM: no es necesario que se una a la tabla PriceType para obtener los valores de Tipo, solo necesita usarlo si desea determinar la secuencia de los ENUM.

Las restricciones de clave externa se introdujeron en SQLite versión 3.6.19.


48
2018-05-30 07:30