Saya perlu mengonversi tabel dari MySQL ke SQLite, tetapi saya tidak tahu cara mengonversi kolom enum, karena saya tidak dapat menemukan ENUM
jenis di SQLite.
Bidang yang disebutkan di atas ada 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 kolom dengan hanya tiga nilai untuk dipilih pengguna, dan saya ingin menerapkannya di DB, tidak hanya di aplikasi saya.
CHECK()
ada saat saya menulis jawaban itu. Kecuali jika talinya sangat pendek, saya benar-benar menentangnya. Maksimal 1 atau 2 karakter.VARCHAR
versi SQLite saya, apakah itu tambahan tipe baru?TEXT
. Pada halaman sumber yang saya berikan, lihat poin 2.1 tentang Penentuan Afinitas Kolom.Cara SQLite adalah dengan menggunakan kendala PERIKSA .
Beberapa contoh:
Hal ini akan membatasi
pType
kolom hanya nilai-nilaiM
,R
danH
, sepertienum("M", "R", "H")
yang akan dilakukan di beberapa mesin SQL lainnya.sumber
enum
karena tidak memungkinkan untuk mengurutkan berdasarkan indeks integer dari nilai-nilai (yang dimungkinkan denganenum
bidang sebenarnya ). Hanya, semuanya, ingatlah itu.Untuk memperluas jawaban MPelletier, Anda dapat membuat tabel seperti ini:
Sekarang nilai enumerasi tersedia langsung di tabel Price karena akan menggunakan ENUM: Anda tidak perlu bergabung dengan tabel PriceType untuk mendapatkan nilai Type, Anda hanya perlu menggunakannya jika Anda ingin menentukan urutan dari ENUM.
Batasan kunci asing diperkenalkan di SQLite versi 3.6.19.
sumber
INSERT INTO PriceType(Type, Seq) VALUES ('M',1), ('R',2), ('H',3);
Anda akan mendapatkan kesalahan sintaks. "Formulir pertama (dengan kata kunci" VALUES ") membuat satu baris baru dalam tabel yang ada." : sqlite.org/lang_insert.html . Putus hindari:INSERT INTO PriceType(Type, Seq) VALUES ('M',1); INSERT INTO PriceType(Type, Seq) VALUES ('R',2); INSERT INTO PriceType(Type, Seq) VALUES ('H',3);
PRAGMA foreign_keys = ON;
untuk setiap sesi - karena fkeys dinonaktifkan secara default di sqlite3PRAGMA foreign_keys = ON;
maka Anda dapat mengaturnya di file .sqliterc Anda di direktori home Anda.UNIQUE
batasan pada Seq. Sesuatu seperti iniCREATE TABLE PriceType( Type Char(1) PRIMARY KEY NOT NULL, Seq INTEGER UNIQUE);