Pertanyaan Bagaimana cara membuat jenis ENUM di SQLite?


Saya perlu mengonversi tabel dari MySQL ke SQLite, tetapi saya tidak dapat mengetahui cara mengonversi bidang enum, karena saya tidak dapat menemukannya ENUM ketik SQLite.

Bidang tersebut adalah pType di tabel berikut:

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

Saya memerlukan bidang dengan hanya tiga nilai bagi pengguna untuk dipilih, dan saya ingin menerapkannya di DB, tidak hanya di aplikasi saya.


75
2018-03-14 13:34


asal


Jawaban:


Tidak ada tipe enum di SQLite, hanya yang berikut:

  • BATAL
  • BILANGAN BULAT
  • NYATA
  • TEKS
  • GUMPAL

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

Saya khawatir sebuah meja enum kustom kecil akan diperlukan dalam kasus Anda.


53
2018-03-14 15:52



Cara 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



Untuk orang lain yang datang ke ini di masa depan, untuk memperluas jawaban MPelletier, Anda dapat membuat tabel sebagai:

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

Selesai seperti ini, nilai pencacahan tersedia langsung di tabel harga karena mereka akan menggunakan ENUM: Anda tidak perlu bergabung ke tabel PriceType untuk mendapatkan nilai Type, Anda hanya perlu menggunakannya jika Anda ingin menentukan urutan ENUM.

Kendala kunci asing diperkenalkan di SQLite versi 3.6.19.


48
2018-05-30 07:30