Memilih tipe data yang tepat untuk kolom tabel adalah keputusan penting. Ini mengurangi kebutuhan untuk konversi tipe data, meningkatkan kinerja kueri database, dan meminimalkan persyaratan penyimpanan.
Dalam panduan ini, Anda menjelajahi berbagai tipe data yang digunakan dalam sistem manajemen basis data relasional (RDBMS). Tipe data ini dapat digunakan saat membuat atau mengubah tabel, atau saat mendeklarasikan variabel dalam prosedur tersimpan database. Beberapa RDBMS yang terkenal adalah MySQL dan PostgreSQL.
Tipe Data Biner SQL
Untuk menyimpan data biner (0
atau 1
), Anda menggunakan BINARY
dan VARBINARY
tipe data. BINARY
tipe data menyimpan data biner dengan panjang tetap, sedangkan VARBINARY
menyimpan data biner dengan panjang variabel. Kedua tipe data ini digunakan untuk menyimpan string bit (0
's dan 1
's). Nilainya ditetapkan dan diambil menggunakan representasi heksadesimal, yang ditunjukkan dengan awalan 0x
. Kolom (atau variabel) dari kedua Binary
dan VarBinary
tipe data digunakan untuk menyimpan konten file gambar seperti JPEG, BMP, file dokumen, dll.
Misalnya, untuk nilai desimal 63
, nilai heksadesimalnya diwakili oleh 0x3F
dan ekuivalen string bit binernya adalah 111111
. Untuk memahami nilai string biner ini dan cara penyimpanannya, perhatikan contoh di bawah ini:
Catatan Kecuali disebutkan sebaliknya, semua perintah database yang ditunjukkan dalam panduan ini berfungsi dengan baik di MySQL dan PostgreSQL .
-
Dari baris perintah, buat tabel bernama
BinaryExample
seperti yang ditunjukkan di bawah ini:CREATE TABLE BinaryExample ( BinaryCol BINARY (10), VarBinaryCol VARBINARY (10) );
-
Masukkan baris ke dalam
BinaryExample
tabel:INSERT INTO BinaryExample (BinaryCol, VarBinaryCol) VALUES (0x4D7953514C, 0x39274D);
-
Pilih data dari
BinaryExample
tabel:SELECT BinaryCol, VarBinaryCol FROM BinaryExample;
Outputnya terlihat sebagai berikut:
+------------------------+----------------------------+ | BinaryCol | VarBinaryCol | +------------------------+----------------------------+ | 0x4D7953514C0000000000 | 0x39274D | +------------------------+----------------------------+
Seperti yang Anda lihat, BinaryCol
data diisi ke ukuran kolom maksimum dengan nol di belakang, tetapi VarBinaryCol
kolom data tidak. Ini karena kolom VarBinaryCol
didefinisikan sebagai panjang variabel.
Catatan Ukuran maksimum (panjang) tipe data Binary dan VarBinary bervariasi tergantung pada implementasi database. Mereka umumnya cukup besar (lebih dari 8.000 byte). Beberapa implementasi database memiliki ekstensi biner untuk tipe data inti ini yang dapat menyimpan data dalam ukuran multi-gigabyte.
Tipe Data Numerik SQL
Tipe data numerik yang tersedia dapat dipecah menjadi grup berikut:Tipe data numerik bilangan bulat, Tipe data numerik tepat, dan Tipe data numerik perkiraan. Bagian di bawah ini membahas setiap kelompok.
Tipe Data Numerik Integer
Tipe data integer dapat Unsigned dan Signed. Tidak ditandatangani hanya dapat menyimpan angka nol dan positif, sedangkan Ditandatangani memungkinkan angka nol, positif, dan negatif.
Sebagian besar implementasi SQL mendukung tipe data Integer INT
, SMALLINT
, dan TINYINT
untuk penyimpanan bilangan bulat positif dan negatif. Tipe data numerik bilangan bulat yang Anda pilih bergantung pada rentang nilai yang perlu Anda simpan.
Tabel berikut menampilkan penyimpanan yang diizinkan dalam byte untuk tipe data numerik bilangan bulat, dan nilai SIGNED minimum dan maksimumnya.
Type | Penyimpanan (byte) | Nilai Minimum DITANDATANGANI | Nilai Maksimum DITANDATANGANI |
---|---|---|---|
INT | 4 | minus 2^31 (-2147483648) | plus 2^31 (2147483647) |
SMALLINT | 2 | minus 2^15 (-32768) | plus 2^15 (32767) |
TINYINT | 1 | -128 | 127 |
Contoh di bawah ini menunjukkan nilai bertanda tangan minimum dan maksimum dari tipe data numerik bilangan bulat menggunakan tabel bernama NumericExample
.
-
Dari baris perintah, buat
NumericExample
tabel.CREATE TABLE NumericExample ( IntColumn INT, SmallIntColumn SMALLINT, TinyIntColumn TINYINT );
-
Masukkan nilai berikut ke dalam
NumericExample
tabel.INSERT INTO NumericExample (IntColumn, SmallIntColumn, TinyIntColumn) VALUES (3258594758, 32767, 255);
Saat Anda menjalankan perintah di atas, Anda mendapatkan
Out of range
kesalahan seperti yang ditunjukkan pada output di bawah ini. Anda tidak dapat memasukkan nilai3258594758
dan255
keIntColumn
danTinyIntColumn
masing-masing. Ini karena nilai SIGNED maksimum untuk tipe data integer adalah2147483647
dan TinyInt adalah127
.ERROR 1264 (22003): Out of range value for column 'IntColumn' at row 1
-
Perbarui nilai
IntColumn
danTinyIntColumn
kolom dan jalankan kembaliINSERT
perintah.INSERT INTO NumericExample (IntColumn, SmallIntColumn, TinyIntColumn) VALUES (2147483647, 32767, 127);
-
Ambil nilai kolom menggunakan
SELECT
pernyataan:SELECT IntColumn, SmallIntColumn, TinyIntColumn FROM NumericExample;
Outputnya seperti contoh di bawah ini:
+------------+----------------+---------------+ | IntColumn | SmallIntColumn | TinyIntColumn | +------------+----------------+---------------+ | 2147483647 | 32767 | 127 | +------------+----------------+---------------+
Tipe Data Numerik Desimal (Numerik Persis)
Tipe data Desimal, DECIMAL
dan NUMERIC
, menyimpan nilai numerik yang tepat dan tetap. Tipe data ini juga dikenal sebagai numerik tepat tipe data. Mereka menyimpan nilai integer di sebelah kiri titik desimal dan nilai pecahan di sebelah kanan titik desimal. Mereka secara fungsional setara dengan persyaratan penyimpanan yang sama. Penyimpanan yang digunakan untuk jenis ini tergantung pada presisi dan rentang yang ditentukan. Mereka dapat berkisar dari 2 byte hingga 17 byte, dan nilainya dapat berkisar dari -10^38 +1
ke +10^38 -1
.
Kedua tipe data ini ditentukan oleh presisi dan skala . Presisi menunjukkan jumlah tempat di sebelah kiri dan kanan titik desimal yang digabungkan, sedangkan skala menunjukkan jumlah total digit di sebelah kanan titik desimal. Kedua tipe data ini dibuat menggunakan sintaks berikut:
DECIMAL(precision, scale)
atau
NUMERIC(precision,scale)
Contoh di bawah ini menunjukkan cara membuat dan menggunakan tipe data numerik desimal.
-
Dari baris perintah, buat
ExactNumericExample
tabel.CREATE TABLE ExactNumericExample ( DecimalCol DECIMAL(5,2), NumericCol NUMERIC(7,2) );
-
Masukkan nilai berikut ke dalam
ExactNumericExample
tabel.INSERT INTO ExactNumericExample (DecimalCol, NumericCol) VALUES (123.45, 12345.67);
-
Ambil nilai kolom menggunakan
SELECT
pernyataan:SELECT DecimalCol, NumericCol FROM ExactNumericExample;
Outputnya seperti berikut:
+------------+------------+ | DecimalCol | NumericCol | +------------+------------+ | 123.45 | 12345.67 | +------------+------------+
Tipe Data Numerik Floating Point (Perkiraan Numerik)
Tipe data numerik floating point adalah FLOAT
dan REAL
. Mereka juga disebut angka perkiraan tipe data. Tipe data ini menyimpan nilai perkiraan karena representasi biner dari data floating point. Sintaks untuk membuat kolom atau variabel floating point adalah sebagai berikut:
Float(N)
Parameter N
menunjukkan apakah bidang harus menampung empat atau delapan byte. Nilai N
lebih besar dari tujuh membutuhkan delapan byte; tujuh atau kurang membutuhkan empat byte. Presisi mengambang untuk tipe data ini berkisar dari -1.79E + 308
ke 1.79E + 308
.
Demikian pula, kolom dan variabel yang didefinisikan sebagai tipe data REAL
membutuhkan empat byte penyimpanan, dan menyediakan rentang nilai dari -3.40E + 38
ke 3.40E + 38
.
Tipe Data Karakter SQL
Tipe data CHAR
dan VARCHAR
digunakan untuk menyimpan data karakter dengan panjang hingga 8.000 byte. Kedua tipe data ini menyimpan nilai string dalam kolom database, tetapi berbeda dalam cara nilai disimpan dan diambil. Panjang CHAR
tipe data tetap pada panjang yang ditentukan apakah ruang alokasi itu digunakan atau tidak. Jika ruang tidak digunakan, kolom atau variabel diisi dengan spasi tambahan. VARCHAR
menampilkan nilai apa adanya, tanpa spasi tambahan.
Contoh di bawah ini menunjukkan tipe data karakter.
-
Dari baris perintah, buat
Employee
tabel.CREATE TABLE Employee ( LastName VARCHAR(25), FirstName VARCHAR(20), Sex CHAR(1) );
-
Masukkan nilai berikut ke dalam
Employee
tabel.INSERT INTO Employee (LastName, FirstName, Sex) VALUES ('Jones', 'Mary', 'F');
-
Ambil nilai kolom menggunakan
SELECT
pernyataan:SELECT LastName, FirstName, Sex FROM Employee;
Outputnya akan seperti berikut:
+----------+-----------+------+ | LastName | FirstName | Sex | +----------+-----------+------+ | Jones | Mary | F | +----------+-----------+------+
Kolom LastName
dan Firstname
dideklarasikan sebagai tipe Varchar
. Ini memungkinkan nama sepanjang definisi tipe data. Tetapi untuk nama yang lebih pendek dari maksimum yang ditentukan, tidak ada spasi kosong yang ditambahkan ke data dalam kolom ini.
Tipe Data Tanggal dan Waktu SQL
DATETIME
Tipe data digunakan untuk menyimpan nilai tanggal dan waktu dalam database. Nilai untuk DATETIME
tipe data menggunakan empat byte penyimpanan untuk bagian tanggal dan empat byte untuk bagian waktu. Porsi waktu dari tipe data ini menentukan waktu dengan perincian hingga jumlah milidetik setelah tengah malam. Presisi untuk tipe data ini berkisar dari “1 Januari 1753”, hingga “31 Desember 9999”, dengan akurasi 3,33 milidetik.
Catatan Jika Anda hanya menetapkan nilai tanggal ke DATETIME
kolom atau variabel tipe data, porsi waktu default ke tengah malam.
Contoh di bawah ini menunjukkan DATETIME
tipe data.
DELIMITER //
CREATE PROCEDURE Datetimedemo()
BEGIN
DECLARE BirthDate DATETIME
SET BirthDate = '1990-01-01 09:00:00'
SELECT BirthDate
END//
DELIMITER ;
call Datetimedemo;
Outputnya seperti berikut:
+----------+-----------+
| BirthDate |
+----------+-----------+
| 1990-01-01 09:00:00 |
+----------+-----------+
Catatan Beberapa implementasi SQL mendukung tipe data tambahan, yang merupakan subset, superset, atau varian dari semua tipe data yang ditentukan di atas.
Pertimbangan Tipe Data SQL
Saat mendesain database, sangat penting untuk memilih tipe data yang sesuai untuk kolom tabel dan variabel prosedur tersimpan dengan hati-hati.
Pilihan yang dibuat dapat berdampak signifikan pada efisiensi penyimpanan dan kinerja database secara keseluruhan. Contoh sederhana adalah untuk menentukan Age
seseorang kolom menjadi Tinyint
tipe data, sebagai lawan dari Int
tipe data. Ini karena alasan berikut:
- Seperti disebutkan sebelumnya,
Tinyint
tipe data memiliki persyaratan penyimpananInt
tipe data. - Efisiensi pengambilan
Tinyint
kolom versusInt
kolom jauh lebih besar.
Di permukaan, ini mungkin tidak menjadi perhatian besar. Namun, jika tabel yang terpengaruh memiliki jutaan baris di dalamnya, baik penyimpanan, maupun efisiensi kinerja pasti dapat dicapai. Jika Anda memperluas kriteria desain ini di seluruh database, Anda dapat menghasilkan efisiensi ini berdasarkan urutan besarnya.
Menghabiskan waktu desain yang diperlukan dalam pemilihan tipe data database berpotensi mengurangi kebutuhan untuk melakukan konversi tipe yang mahal dalam kueri dan logika prosedur tersimpan, saat membandingkan kolom dari tipe data yang berbeda.
Misalnya, dalam satu tabel, Anda menyimpan tanggal dalam Varchar(20)
kolom, dan di tabel lain Anda menyimpan tanggal dalam Datetime
kolom. Jika Anda perlu membandingkan dua kolom, Anda harus menggunakan fungsi konversi tipe data dalam kueri di salah satu dari dua kolom. Ini adalah operasi yang mahal.
Kesimpulan
Tipe Data SQL adalah atribut yang terkait dengan kolom dan variabel database. Atribut ini dapat berbentuk biner, numerik, karakter, dan tanggal/waktu. Waktu desain yang cermat diperlukan untuk memastikan bahwa kolom dan variabel didefinisikan dengan tipe data yang benar, untuk memastikan efisiensi penyimpanan dan eksekusi kueri.