Ringkasan :dalam tutorial ini, Anda akan belajar tentang sistem tipe data SQLite dan konsep terkaitnya seperti kelas penyimpanan, pengetikan manifes, dan afinitas tipe.
Pengantar tipe data SQLite
Jika Anda berasal dari sistem database lain seperti MySQL dan PostgreSQL, Anda akan melihat bahwa mereka menggunakan pengetikan statis . Artinya, ketika Anda mendeklarasikan kolom dengan tipe data tertentu, kolom tersebut hanya dapat menyimpan data dengan tipe data yang dideklarasikan.
Berbeda dari sistem database lainnya, SQLite menggunakan sistem tipe dinamis . Dengan kata lain, nilai yang disimpan dalam kolom menentukan tipe datanya, bukan tipe data kolom.
Selain itu, Anda tidak perlu mendeklarasikan tipe data tertentu untuk kolom saat Anda membuat tabel. Jika Anda mendeklarasikan kolom dengan tipe data integer, Anda dapat menyimpan semua tipe data seperti teks dan BLOB, SQLite tidak akan mengeluh tentang hal ini.
SQLite menyediakan lima tipe data primitif yang disebut sebagai kelas penyimpanan .
Kelas penyimpanan menjelaskan format yang digunakan SQLite untuk menyimpan data pada disk. Kelas penyimpanan lebih umum daripada tipe data, mis., INTEGER
kelas penyimpanan mencakup 6 jenis bilangan bulat. Dalam kebanyakan kasus, Anda dapat menggunakan kelas penyimpanan dan tipe data secara bergantian.
Tabel berikut mengilustrasikan 5 kelas penyimpanan di SQLite:
Kelas Penyimpanan | Artinya |
---|---|
NULL | Nilai NULL berarti informasi yang hilang atau tidak diketahui. |
BATABATA | Nilai integer adalah bilangan bulat (baik positif atau negatif). Sebuah bilangan bulat dapat memiliki ukuran variabel seperti 1, 2,3, 4, atau 8 byte. |
NYATA | Nilai real adalah bilangan real dengan nilai desimal yang menggunakan float 8 byte. |
TEKS | TEXT digunakan untuk menyimpan data karakter. Panjang maksimum TEXT tidak terbatas. SQLite mendukung berbagai pengkodean karakter. |
BLOB | BLOB adalah singkatan dari objek besar biner yang dapat menyimpan semua jenis data. Ukuran maksimum BLOB, secara teoritis, tidak terbatas. |
SQLite menentukan tipe data suatu nilai berdasarkan tipe datanya menurut aturan berikut:
- Jika literal tidak memiliki tanda kutip dan titik desimal atau eksponen, SQLite menetapkan kelas penyimpanan INTEGER.
- Jika literal diapit oleh tanda kutip tunggal atau ganda, SQLite menetapkan kelas penyimpanan TEXT.
- Jika literal tidak memiliki kutipan atau titik desimal atau eksponen, SQLite menetapkan kelas penyimpanan NYATA.
- Jika literal adalah NULL tanpa tanda kutip, ia menetapkan kelas penyimpanan NULL.
- Jika literal memiliki X'ABCD' atau x 'abcd', SQLite menetapkan kelas penyimpanan BLOB.
SQLite tidak mendukung kelas penyimpanan tanggal dan waktu bawaan. Namun, Anda dapat menggunakan TEXT, INT, atau REAL untuk menyimpan nilai tanggal dan waktu. Untuk informasi rinci tentang cara menangani nilai tanggal dan waktu, lihat tutorial tanggal dan waktu SQLite.
SQLites menyediakan typeof()
fungsi yang memungkinkan Anda memeriksa kelas penyimpanan suatu nilai berdasarkan formatnya. Lihat contoh berikut:
SELECT
typeof(100),
typeof(10.0),
typeof('100'),
typeof(x'1000'),
typeof(NULL);
Code language: SQL (Structured Query Language) (sql)
Satu kolom di SQLite dapat menyimpan tipe data campuran. Lihat contoh berikut.
Pertama, buat tabel baru bernama test_datatypes
untuk pengujian.
CREATE TABLE test_datatypes (
id INTEGER PRIMARY KEY,
val
);
Code language: SQL (Structured Query Language) (sql)
Kedua, masukkan data ke dalam test_datatypes
tabel.
INSERT INTO test_datatypes (val)
VALUES
(1),
(2),
(10.1),
(20.5),
('A'),
('B'),
(NULL),
(x'0010'),
(x'0011');
Code language: SQL (Structured Query Language) (sql)
Ketiga, gunakan typeof()
berfungsi untuk mendapatkan tipe data dari setiap nilai yang disimpan dalam val
kolom.
SELECT
id,
val,
typeof(val)
FROM
test_datatypes;
Code language: SQL (Structured Query Language) (sql)
Anda mungkin bertanya bagaimana SQLite mengurutkan data dalam kolom dengan kelas penyimpanan yang berbeda seperti kolom val di atas.
Untuk mengatasi ini, SQLite menyediakan seperangkat aturan berikut saat menyortir:
- Kelas penyimpanan NULL memiliki nilai terendah. Ini lebih rendah dari nilai lainnya. Di antara nilai NULL, tidak ada urutan.
- Kelas penyimpanan berikutnya yang lebih tinggi adalah INTEGER dan REAL. SQLite membandingkan INTEGER dan REAL secara numerik.
- Kelas penyimpanan berikutnya yang lebih tinggi adalah TEXT. SQLite menggunakan susunan nilai TEXT saat membandingkan nilai TEXT.
- Kelas penyimpanan tertinggi adalah BLOB. SQLite menggunakan fungsi C
memcmp()
untuk membandingkan nilai BLOB.
Saat Anda menggunakan ORDER BY
klausa untuk mengurutkan data dalam kolom dengan kelas penyimpanan yang berbeda, SQLite melakukan langkah-langkah berikut:
- Pertama, kelompokkan nilai berdasarkan kelas penyimpanan:NULL, INTEGER, dan REAL, TEXT, dan BLOB.
- Kedua, urutkan nilai di setiap grup.
Pernyataan berikut mengurutkan data campuran dalam val
kolom test_datatypes
tabel:
SELECT
id,
val,
typeof(val)
FROM
test_datatypes
ORDER BY val;
Code language: SQL (Structured Query Language) (sql)
Pengetikan manifes SQLite &jenis afinitas
Konsep penting lainnya yang terkait dengan tipe data SQLite adalah pengetikan manifes dan afinitas tipe:
- Pengetikan manifes berarti bahwa tipe data adalah properti dari nilai yang disimpan dalam kolom, bukan properti kolom tempat nilai disimpan. SQLite menggunakan pengetikan manifes untuk menyimpan nilai jenis apa pun dalam kolom.
- Afinitas tipe kolom adalah tipe yang direkomendasikan untuk data yang disimpan di kolom tersebut. Perhatikan bahwa tipe data direkomendasikan, tidak wajib, oleh karena itu, kolom dapat menyimpan semua jenis data.
Dalam tutorial ini, Anda telah mempelajari tentang tipe data SQLite dan beberapa konsep penting termasuk kelas penyimpanan, pengetikan manifes, dan afinitas tipe.