Di SQLite, ada beberapa cara untuk melihat struktur tabel. Oleh karena itu, ada beberapa cara untuk memeriksa tipe data kolom di dalam tabel tersebut.
Ada juga fungsi yang memungkinkan kita memeriksa tipe data kolom yang dikembalikan dalam kueri.
Berikut adalah lima cara untuk memeriksa tipe data kolom di SQLite.
PRAGMA table_info()
Pernyataan
PRAGMA table_info()
pernyataan mengembalikan informasi tentang tabel tertentu, termasuk kolom dan tipe datanya.
Berikut ini contoh pengembalian informasi tentang tabel yang disebut Album
.
PRAGMA table_info(Album);
Hasil:
cid name type notnull dflt_value pk --- -------- ------------- ------- ---------- -- 0 AlbumId INTEGER 1 1 1 Title NVARCHAR(160) 1 0 2 ArtistId INTEGER 1 0
Dalam hal ini, kolom dibuat dengan tipe data yang ditentukan secara eksplisit.
Ini contoh lain:
PRAGMA table_info(Events);
Hasil:
cid name type notnull dflt_value pk --- --------- ------- ------- ---------- -- 0 EventId INTEGER 0 1 1 EventName 0 0 2 StartDate 0 0 3 EndDate 0 0
Dalam hal ini, hanya kolom pertama yang memiliki tipe data yang didefinisikan secara eksplisit.
SQLite menggunakan pendekatan yang berbeda untuk tipe data dari RDBMS utama lainnya. SQLite menggunakan sistem pengetikan dinamis, sehingga tipe data dari suatu nilai dikaitkan dengan nilai itu sendiri, bukan dengan wadahnya.
Yang mengatakan, SQLite memungkinkan kita untuk secara eksplisit menentukan tipe data kolom. Pada contoh di atas, beberapa kolom dibuat dengan tipe data yang didefinisikan secara eksplisit, dan kita dapat melihat tipe data tersebut dengan menjalankan PRAGMA
di atas pernyataan.
PRAGMA table_xinfo()
Pernyataan
PRAGMA table_xinfo()
pernyataan ini persis sama dengan PRAGMA table_info()
pernyataan, kecuali bahwa ia juga mengembalikan kolom tersembunyi pada tabel virtual:
PRAGMA table_xinfo(Album);
Hasil:
cid name type notnull dflt_value pk hidden --- -------- ------------- ------- ---------- -- ------ 0 AlbumId INTEGER 1 1 0 1 Title NVARCHAR(160) 1 0 0 2 ArtistId INTEGER 1 0 0
Kita dapat melihat bahwa pada dasarnya sama dengan table_info()
, kecuali dengan kolom tambahan.
.schema
Perintah
Cara lain untuk mengambil struktur tabel adalah dengan menggunakan .schema
memerintah. Ini adalah salah satu dari beberapa metode yang dapat Anda gunakan untuk mengembalikan SQL yang digunakan untuk membuat tabel.
Contoh:
.schema Album
Hasil:
CREATE TABLE Chinook.[Album] ( [AlbumId] INTEGER NOT NULL, [Title] NVARCHAR(160) NOT NULL, [ArtistId] INTEGER NOT NULL, CONSTRAINT [PK_Album] PRIMARY KEY ([AlbumId]), FOREIGN KEY ([ArtistId]) REFERENCES [Artist] ([ArtistId]) ON DELETE NO ACTION ON UPDATE NO ACTION ); CREATE INDEX Chinook.[IFK_AlbumArtistId] ON [Album] ([ArtistId]);
Metode ini memungkinkan kita untuk menghasilkan SQL yang diperlukan untuk membuat ulang tabel – termasuk menentukan tipe data apa pun.
sqlite_schema
Tabel
Anda dapat menggunakan sqlite_schema
tabel ke hal yang sama seperti contoh sebelumnya.
Berikut ini contoh menggunakan tabel yang sama.
SELECT sql
FROM Chinook.sqlite_schema
WHERE tbl_name = 'Album';
Hasil:
CREATE TABLE [Album] ( [AlbumId] INTEGER NOT NULL, [Title] NVARCHAR(160) NOT NULL, [ArtistId] INTEGER NOT NULL, CONSTRAINT [PK_Album] PRIMARY KEY ([AlbumId]), FOREIGN KEY ([ArtistId]) REFERENCES [Artist] ([ArtistId]) ON DELETE NO ACTION ON UPDATE NO ACTION ) CREATE INDEX [IFK_AlbumArtistId] ON [Album] ([ArtistId])
sqlite_schema
tabel juga dapat diakses menggunakan sqlite_master
.
typeof()
Fungsi
Anda dapat menggunakan typeof()
berfungsi untuk mendapatkan tipe data kolom yang dikembalikan oleh kueri. Lebih khusus lagi, ini mengembalikan tipe data dari ekspresi yang diberikan.
Contoh:
SELECT typeof(Title) FROM Album
LIMIT 1;
Hasil:
text
Di sini saya menggunakan LIMIT
klausa untuk membatasi hasil hanya satu baris, jika tidak, kita akan melihat hasil yang sama diulang untuk setiap baris dalam tabel.
Ingatlah bahwa metode ini mengembalikan tipe data ekspresi yang dikembalikan oleh kueri – bukan tipe data aktual yang ditetapkan ke kolom. Jenis yang mungkin dikembalikan adalah:
null
integer
real
text
blob
Setiap kolom dalam database SQLite diberikan salah satu dari jenis afinitas di atas.
Ini sebenarnya disebut sebagai kelas penyimpanan. Kelas penyimpanan lebih umum daripada tipe data. Semua nilai dalam pernyataan SQL, apakah itu literal yang disematkan dalam teks pernyataan SQL atau parameter yang terikat ke pernyataan SQL yang telah dikompilasi sebelumnya memiliki kelas penyimpanan implisit. Mesin database dapat mengonversi nilai antara kelas penyimpanan numerik (INTEGER
dan REAL
) dan TEXT
selama eksekusi kueri.
Informasi Lebih Lanjut tentang Tipe Data di SQLite
Lihat tipe data SQLite (dokumentasi SQLite) dan Keuntungan Pengetikan Fleksibel (dokumentasi SQLite) untuk informasi selengkapnya tentang tipe data di SQLite.
Lihat juga STRICT
tabel (dokumentasi SQLite), fitur yang ditambahkan dalam SQLite versi 3.37.0 pada tanggal 27-11-2011 yang memungkinkan kita untuk menolak sistem pengetikan fleksibel, dan sebagai gantinya menerapkan sistem tipe kaku tradisional yang ditemukan di semua mesin database SQL lainnya dan di standar SQL.