Frage Wie erstelle ich ENUM Typ in SQLite?


Ich muss eine Tabelle von MySQL zu SQLite konvertieren, aber ich kann nicht herausfinden, wie man ein enum Feld umwandelt, weil ich nicht finden kann ENUM Geben Sie SQLite ein.

Das vorgenannte Feld ist pType in der folgenden Tabelle:

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

Ich brauche ein Feld mit nur drei Werten, die der Benutzer auswählen kann, und ich möchte dies in der Datenbank erzwingen, nicht nur in meiner Anwendung.


75
2018-03-14 13:34


Ursprung


Antworten:


Es gibt keinen Aufzählungstyp in SQLite, nur das Folgende:

  • NULL
  • GANZE ZAHL
  • ECHT
  • TEXT
  • KLECKS

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

Ich fürchte, ein kleiner, benutzerdefinierter Enum-Tisch wird in Ihrem Fall benötigt.


53
2018-03-14 15:52



SQLite Weg

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



Für andere, die in der Zukunft darauf kommen, um die Antwort von MPelletier zu erweitern, können Sie die Tabellen wie folgt erstellen:

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

Auf diese Weise sind die Aufzählungswerte direkt in der Preistabelle verfügbar, da sie ein ENUM verwenden würden: Sie müssen der PriceType-Tabelle nicht beitreten, um die Type-Werte abzurufen, Sie müssen sie nur verwenden, wenn Sie sie ermitteln möchten die Reihenfolge der ENUMs.

Fremdschlüsseleinschränkungen wurden in SQLite Version 3.6.19 eingeführt.


48
2018-05-30 07:30