Tipe data numerik MYSQL


You are here: Home » MySQL » Tutorial Belajar MySQL Part 13: Tipe Data Numerik
Tutorial Belajar MySQL Part 13: Tipe Data Numerik

Tutorial Belajar MySQL Part 13: Tipe Data Numerik

Jika kita membuat tabel, seperti yang telah kita pelajari pada Tutorial Belajar MySQL: Membuat dan Menghapus Tabel, untuk mendefiniskan kolom, kita setidaknya harus mengetahui tipe data untuk kolom tersebut. Dalam tutorial ini, kita akan mempelajari tentang tipe-tipe data numerik (angka), yang meliputi Integer, Fixed Point, dan Floating Point dalam MySQL

Tipe Integer : Tinyint , Smallint, Mediumint, Integer (Int), dan Bigint

Integer adalah tipe data untuk angka bulat (misalnya: 1,6,59,-533, 1449). MySQL menyediakan beberapa tipe data untuk integer, perbedaannya lebih kepada jangkauan yang juga berpengaruh terhadap ukuran tipe data tersebut.
Jangkauan serta ukuran penyimpanan tipe data integer dalam MySQL dapat dilihat dari tabel dibawah ini:
Tipe Data
Jangkauan SIGNED
Jangkauan UNSIGNED
Ukuran
TINYINT-128 to 1270 to 2551 byte
SMALLINT-32,768 to 32,7670 to 65,5352 bytes
MEDIUMINT-8,388,608 to 8,388,6070 to 16,777,2153 bytes
INT-2,147,483,648 to 2,147,483,6470 to 4,294,967,2954 bytes
BIGINT-9,223,372,036,854,775,808 to
9,223,372,036,854,775,807
0 to
18,446,744,073,709,551,615
8 bytes
*Selain INT, kita dapat juga menuliskan INTEGER dalam query MySQL, keduanya sama persis, hanya beda pada penamaan.
Pemilihan tipe data ini tergantung akan kebutuhan data kita. Misalkan untuk nomor urut absensi pada suatu kelas yang memiliki maksimal 30 orang, tipe data TINYINT sudah mencukupi. Namun jika kita bermaksud membuat absensi seluruh rakyat indonesia, tipe data TINYINT sampai dengan MEDIUMINT tidak akan mencukupi. Kita harus memilih INT atau BIGINT.
Idealnya, sedapat mungkin kita menggunakan tipe data paling kecil, karena menyangkut dengan ukuran dari database. Menggunakan INT untuk jumlah anggota keluarga seseorang mungkin tidak efisien. Namun lebih baik mengantisipasi besarnya data sedapat mungkin pada awal pembuatan database. Perubahan tipe data disaat aplikasi telah diimplementasikan akan berpotensi membuat sebagian data hilang, atau aplikasi gagal berjalan. Dengan ukuran media penyimpanan yang semakin besar dan murah, mengorbankan ukuran demi aplikasi yang handal bukan sesuatu yang buruk.
Format query untuk tipe data integer adalah:
INT[(M)] [UNSIGNED] [ZEROFILL]
Setiap tipe data integer dapat di definisikan sebagai UNSIGNED, dimana kita mengorbankan nilai negatif, untuk mendapatkan jangkauan nilai positif yang lebih tinggi.
Dalam deklarasi tipe data integer, nilai M adalah jumlah digit yang disediakan untuk menampilkan data. Misalnya kita mendefiniskan suatu kolom dengan INT(5), jika kita input angka 102, maka MySQL akan menambahkan spasi sebanyak 2 buah di depan angka, agar tampilan data menjadi 5 digit (istilah pemogramannya : padding left). Nilai M tidak mempengaruhi nilai maksimal dari integer. Jika angka yang diinputkan melebihi digit M, MySQL akan tetap menampilkan hasilny (selama masih dalam jangkauan tipe data tersebut). Jika kita deklarasikan INT(4), nilai maksimal tetap 2,147,483,647 bukan 9999
Selain opsional query UNSIGNED, pendeklarasian integer juga terdapat opsional atribut ZEROFILL. ZEROFILL ini berhubungan dengan nilai M, yang akan mengisi angka 0 pada bagian kiri nilai yang diinput alih-alih spasi.
Contoh query pembuatan tabel dengan deklarasi integer :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
mysql> CREATE TABLE contoh_int (mini TINYINT,  kecil SMALLINT UNSIGNED,
sedang MEDIUMINT(4) ZEROFILL, biasa INT(4) UNSIGNED,
besar BIGINT(6) UNSIGNED ZEROFILL);
 
Query OK, 0 rows affected (0.06 sec)
 
mysql> DESC contoh_int;
+--------+--------------------------------+------+-----+---------+-------+
| Field  | Type                           | Null | Key | Default | Extra |
+--------+--------------------------------+------+-----+---------+-------+
| mini   | tinyint(4)                     | YES  |     | NULL    |       |
| kecil  | smallint(5) unsigned           | YES  |     | NULL    |       |
| sedang | mediumint(4) unsigned zerofill | YES  |     | NULL    |       |
| biasa  | int(4) unsigned                | YES  |     | NULL    |       |
| besar  | bigint(6) unsigned zerofill    | YES  |     | NULL    |       |
+--------+--------------------------------+------+-----+---------+-------+
5 rows in set (0.21 sec)
Dari query DESC kita dapat melihat kolom mini dan kecil, secara otomatis akan bersisi nilai M, walaupun dalam deklarasi pembuatan tabel kita tidak menyatakannya secara langsung. Nilai ini didapat dari jangkauan terbesar tipe data tersebut
Jika kita inputkan angka 122 kedalam seluruh kolom, hasilnya adalah sebagai berikut:
1
2
3
4
5
6
7
8
9
10
11
12
13
mysql> INSERT INTO contoh_int values ((122), (122), (122),
(122), (122));
 
Query OK, 1 row affected (0.07 sec)
 
mysql> SELECT * FROM contoh_int;
 
+------+-------+--------+-------+--------+
| mini | kecil | sedang | biasa | besar  |
+------+-------+--------+-------+--------+
|  122 |   122 |   0122 |   122 | 000122 |
+------+-------+--------+-------+--------+
1 row in set (0.00 sec)
Untuk perintah INSERT dan SELECT, kita akan mempelajarinya lebih jauh pada tutorial berikutnya, query INSERT digunakan untuk input data ke dalam tabel, dan SELECT digunakan untuk menampilkan nilai dari tabel. Dari contoh diatas kita setidaknya mendapat gambaran bagaimana cara deklarasi tipe data integer. Perhatikan untuk kolom sedang dan besar, terdapat angka nol di depan angka. Hal ini karena kedua kolom tersebut kita deklarasikan sebagai ZEROFILL.

Tipe Fixed Point : DECIMAL

Tipe data fixed point adalah tipe data angka pecahan (desimal), dimana jumlah angka pecahan (angka di belakang koma) sudah di tentukan dari awal. Format penulisan query fixed point adalah:
DECIMAL [(M[,D])] [UNSIGNED] [ZEROFILL]
DECIMAL merupakan kata kunci untuk mendefiniskan suatu kolom sebagai fixed point.
Besar dari tipe data fixed point ini tergantung dari opsional query [M,D] dimana M adalah total jumlah digit keseluruhan, dan D adalah jumlah digit dibekang koma (pecahan). Contohnya DEC [6,2] akan mendefiniskan suatu kolom agar memuat 6 digit angka, dengan 4 angka di depan koma, dan 2 digit angka di belakang koma.
Deklarasi
Jangkauan
DECIMAL (4,1)-999,9 to 999,9
DECIMAL (6,2)-9999,99 to 9999,99
DECIMAL (3,2)-9,99 to 9,99
DECIMAL (8,2)-999999,99 to 999999,99
Maksimal nilai untuk M adalah 65, dan maksimal nilai D adalah 30. Dengan syarat, nilai D tidak boleh lebih besar dari nilai M. Jika kita tidak menyertakan M dan D dalam mendefinisikan suatu kolom DECIMAL, maka secara sistem M akan di set 10. Dan D default 0. Tipe data DECIMAL ini cocok digunakan untuk kolom yang difungsikan untuk menampung nilai uang.
Opsional query UNSIGNED jika disertakan hanya semata-mata membuang nilai negatif dari DECIMAL, tanpa memperbesar jangkauannya. Opsional query ZEROFILL sama seperti integer, akan mengisi angka 0 pada bagian kiri angka.
Contoh pendefinisian tabel dengan kolom DECIMAL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mysql> CREATE TABLE contoh_dec (satuan DECIMAL(3,2), puluhan DECIMAL(4,2),
ribuan DECIMAL(5,2), normal DECIMAL, cantik DECIMAL(8,2) ZEROFILL);
 
Query OK, 0 rows affected (0.13 sec)
 
mysql> DESCRIBE contoh_dec;
+---------+--------------------------------+------+-----+---------+-------+
| Field   | Type                           | Null | Key | Default | Extra |
+---------+--------------------------------+------+-----+---------+-------+
| satuan  | decimal(3,2)                   | YES  |     | NULL    |       |
| puluhan | decimal(4,2)                   | YES  |     | NULL    |       |
| ribuan  | decimal(5,2)                   | YES  |     | NULL    |       |
| normal  | decimal(10,0)                  | YES  |     | NULL    |       |
| cantik  | decimal(8,2) unsigned zerofill | YES  |     | NULL    |       |
+---------+--------------------------------+------+-----+---------+-------+
5 rows in set (0.08 sec)
Perhatikan kolom normal, bahwa nilai DECIMAL di deklarasikan sebagai DECIMAL(10,0), ini adalah default MySQL jika kita tidak menuliskan jumlah digit.
1
2
3
4
5
6
7
8
9
10
11
12
mysql> INSERT INTO contoh_dec values ((1.3), (55.32),
(523.77), (7832.3), (150000.45));
 
Query OK, 1 row affected, 1 warning (0.07 sec)
 
mysql> SELECT * FROM contoh_dec;
+--------+---------+--------+--------+-----------+
| satuan | puluhan | ribuan | normal | cantik    |
+--------+---------+--------+--------+-----------+
|   1.30 |   55.32 | 523.77 |   7832 | 150000.45 |
+--------+---------+--------+--------+-----------+
1 row in set (0.00 sec)
Khusus untuk kolom normal, kita perhatikan karena deklarasinya adalah DECIMAL (10,0), maka seluruh digit dibelakang koma dari inputan kita akan dihilangkan.
Selain menggunakan DECIMAL untuk fixed point, MySQL juga menyediakan beberapa nama lain, yang sama persis dengan fungsi DECIMAL, yaitu: NUMERIC, FIXED dan DEC. Pilihan ini disediakan agar MySQL sesuai dengan standard SQL yang digunakan pada berbagai RDBMS lain, seperti Oracle.

Tipe Floating Point : FLOAT dan DOUBLE

Jika pada tipe fixed point kita mendefiniskan suatu kolom dengan nilai pecahan yang tetap, untuk tipe floating point, nilai pecahan yang dapat diinput bisa berbeda-beda. Untuk tipe floating point, MySQL menyediakan 2 jenis tipe data, yaitu FLOAT dan DOUBLE. Perbedaan keduanya terletak pada presisi (ketelitian) pembulatan. FLOAT menggunakan single-precision, sedangkan DOUBLE menggunakan  double-precision.
Tipe Floating Point juga diperuntukkan untuk nilai desimal, perbedaan antara Fixed Point dengan Floating Point lebih kedalam arsitektur (cara perhitungannya pada prosesor komputer) dan ketelitian (presisi) yang digunakan. Tentang perbedaan fixed dan floating point tidak akan kita bahas, namun setidaknya kita mengetahui bahwa MySQL menyediakan tipe data untuk keduanya.
Tipe Data
Jangkauan
Ukuran
FLOAT-3.402823466E+38 to 3.402823466E+384 bytes
DOUBLE-1.7976931348623157E+308 to 1.7976931348623157E+3088 bytes
Untuk tipe data FLOAT dan DOUBLE, format querynya adalah:
FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]
Sama seperti pada tipe data DECIMAL, nilai opsional query [M, D] dimana M adalah total jumlah digit keseluruhan, dan D adalah jumlah digit dibekang koma (pecahan). Maksimal nilai M dan D akan berbeda pada tiap komputer, tergantung kemampuan prosesor mengolah tipe data floating point. FLOAT biasanya akan akurat untuk penyimpanan sekitar 7 angka desimal, sedangkan DOUBLE mencapai 15 angka desimal.
Opsional query UNSIGNED jika di nyatakan, akan menghilangkan kemampuan tipe data untuk meyimpan angka negatif (tidak menambah jangkauan sebagaimana tipe data integer)
Opsional query ZEROFILL sama seperti integer, akan mengisi angka 0 pada bagian kiri angka.
Contoh pendefinisan tipe data floating point:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
mysql> CREATE TABLE contoh_float (satuan FLOAT(3,2), puluhan FLOAT(4,2),
ribuan FLOAT(5,2), positif DOUBLE ZEROFILL UNSIGNED,
cantik DOUBLE(8,2) ZEROFILL);
 
Query OK, 0 rows affected (1.21 sec)
 
mysql> DESCRIBE contoh_float;
+---------+-------------------------------+------+-----+---------+-------+
| Field   | Type                          | Null | Key | Default | Extra |
+---------+-------------------------------+------+-----+---------+-------+
| satuan  | float(3,2)                    | YES  |     | NULL    |       |
| puluhan | float(4,2)                    | YES  |     | NULL    |       |
| ribuan  | float(5,2)                    | YES  |     | NULL    |       |
| positif | double unsigned zerofill      | YES  |     | NULL    |       |
| cantik  | double(8,2) unsigned zerofill | YES  |     | NULL    |       |
+---------+-------------------------------+------+-----+---------+-------+
5 rows in set (0.04 sec)
 
mysql> INSERT INTO contoh_float values ((1.3), (55.32), (523.77),
(7832.3), (150000.45));
 
Query OK, 1 row affected (0.15 sec)
 
mysql> SELECT * FROM contoh_float;
+--------+---------+--------+------------------------+-----------+
| satuan | puluhan | ribuan | positif                | cantik    |
+--------+---------+--------+------------------------+-----------+
|   1.30 |   55.32 | 523.77 | 00000000000000007832.3 | 150000.45 |
+--------+---------+--------+------------------------+-----------+
1 row in set (0.00 sec)
Karena tipe data floating point menggunakan pendekatan nilai, menggunakan tipe data ini untuk perbandingan akan menyebabkan masalah. Hal ini disebabkan cara penyimpanan arsitektur prosesor dalam menangani tipe floating point, bukan semata-mata permasalahan pada MySQL. Pertimbangkan untuk menggunakan tipe data fixed point jika lebih membutuhkan presisi/ketelitian.
 
ReadmoreTipe data numerik MYSQL

Membuat Tabel, Input data dalam SQL

Kali ini kita akan mempelajari perintah (query) MySQL untuk menambahkan data ke dalam tabel menggunakan perintah INSERT. Query INSERT sendiri memiliki banyak variasi perintah yang fleksibel tergantung kebutuhan. Termasuk pilihan ketika data yang akan diinput terdapat duplikasi, dengan opsi IGNORE dan ON DUPLICATE KEY UPDATE.
Sebagai tabel contoh untuk memahami perintah INSERT MySQL, kita akan membuat tabel mata_kuliah dalam database mahasiswa dengan query sebagai berikut:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mahasiswa          |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.08 sec)
 
mysql> USE mahasiswa;
Database changed
 
mysql> CREATE TABLE mata_kuliah (kode_matkul CHAR(5) PRIMARY KEY,
nama_matkul VARCHAR(50) NOT NULL, jumlah_SKS TINYINT UNSIGNED DEFAULT '2',
nama_jurusan VARCHAR(50));
Query OK, 0 rows affected (0.01 sec)
 
mysql> DESC mata_kuliah;
+--------------+---------------------+------+-----+---------+-------+
| Field        | Type                | Null | Key | Default | Extra |
+--------------+---------------------+------+-----+---------+-------+
| kode_matkul  | char(5)             | NO   | PRI | NULL    |       |
| nama_matkul  | varchar(50)         | NO   |     | NULL    |       |
| jumlah_SKS   | tinyint(3) unsigned | YES  |     | 2       |       |
| nama_jurusan | varchar(50)         | YES  |     | NULL    |       |
+--------------+---------------------+------+-----+---------+-------+
4 rows in set (0.01 sec)
Tabel mata_kuliah diatas didefinisikan menggunakan beberapa atribut yang telah kita bahas pada tutorial sebelumnya (atribut PRIMARY KEY merupakan atribut yang membuat suatu kolom dalam tabel menjadi kolom kunci, penjelasan lebih lanjut akan kita bahas pada kesempatan berikutnya)

Penulisan dasar query INSERT

Penulisan dasar dari perintah INSERT dalam MySQL adalah sebagai berikut:
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name [(col_name,...)]
{VALUES | VALUE} ({expr | DEFAULT},...),(...),...
[ ON DUPLICATE KEY UPDATE
col_name=expr
[, col_name=expr] ... ]
Format perintah INSERT tersebut langsung saya ambil dari manual MySQL, dan kita akan membahasnya secara detail dalam tutorial MySQL ini.
sedikit penjelasan tentang format dasar MySQL diatas, di dalam manual MySQL, perintah yang terdapat diantara 2 kurung siku ([.....]) adalah optional, kita tidak harus menulis seluruh perintah tersebut untuk menginputkan sebuah nilai pada tabel, namun dari format tersebut kita dapat mengetahui berbagai opsi yang tersedia yang dapat digunakan.

Penggunaan Query INSERT…VALUES

Format perintah INSERT yang pertama kita bahas adalah yang paling sederhana, yaitu:
INSERT INTO nama_tabel VALUES  (nilai_kolom1, nilai_kolom2,...);
nama_tabel adalah nama dari tabel yang akan kita tambahkan nilainya, sedangkan nilai_kolom1 adalah nilai yang akan kita input kedalam tabel MySQL, nilai_kolom2 adalah nilai untuk kolom kedua, dan seterusnya. Perhatikan bahwa nilai_kolom harus berada dalam tanda kurung dan dipisahkan dengan koma untuk kolom-kolom berikutnya.
Langsung saja kita contohkan untuk memasukkan sebaris data ke dalam tabel mata_kuliah:
1
2
3
4
5
6
7
8
9
10
mysql> INSERT INTO mata_kuliah  VALUES ('KIMDA','Kimia Dasar',2,' Kimia');
Query OK, 1 row affected (0.06 sec)
 
mysql> select * from mata_kuliah;
+-------------+-------------+------------+--------------+
| kode_matkul | nama_matkul | jumlah_SKS | nama_jurusan |
+-------------+-------------+------------+--------------+
| KIMDA       | Kimia Dasar |          2 |  Kimia       |
+-------------+-------------+------------+--------------+
1 row in set (0.00 sec)
Seperti yang telah kita bahas pada Tutorial MySQL Tipe Data String (CHAR atau VARCHAR) maupun NUMERIK (INT), bahwa untuk kolom yang berisi karakter, harus berada di dalam tanda petik (‘), dan sebaliknya untuk kolom yang berisi nilai numerik harus tanpa tanda petik.
Jika kita ingin langsung memasukkan 2 baris data atau lebih dalam satu perintah query INSERT MySQL, kita tinggal menambahkan isi data untuk baris berikutnya dibelakang perintah dengan format penulisan sebagai berikut:
INSERT INTO nama_tabel VALUES  (nilai_kolom1a, nilai_kolom2a,...), (nilai_kolom1b, nilai_kolom2b,...);
Contoh query untuk penambahan data dengan 2 baris sekaligus adalah:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql> INSERT INTO mata_kuliah  VALUES ('MMDAS','Matematika Dasar',4,'Matematika'),
('JRKOM','Jaringan Komputer',2,'Ilmu Komputer');
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0
 
mysql> select * from mata_kuliah;
+-------------+-------------------+------------+---------------+
| kode_matkul | nama_matkul       | jumlah_SKS | nama_jurusan  |
+-------------+-------------------+------------+---------------+
| JRKOM       | Jaringan Komputer |          2 | Ilmu Komputer |
| KIMDA       | Kimia Dasar       |          2 |  Kimia        |
| MMDAS       | Matematika Dasar  |          4 | Matematika    |
+-------------+-------------------+------------+---------------+
3 rows in set (0.00 sec)
Perintah INSERT… VALUES diatas cocok untuk tabel dimana kita telah mengetahui urutan dari kolom yang ada. Namun dalam situasi kita tidak mengetahui urutan kolom dari tabel, kita harus mendefenisikan urutan kolom yang akan diisi.

Penggunaan Query INSERT (nama_kolom)… VALUES

Untuk situasi dimana kolom yang akan diisi tidak diketahui urutannya, atau kita hanya akan mengisi sebagian kolom saja, maka kita harus mendefenisikan kolom-kolom mana saja yang akan diisi nilainya. Untuk keperluan tersebut, MySQL menyediakan fariasi untuk perintah INSERT, yaitu:
INSERT INTO nama_tabel (kolom1,kolom2,...) VALUES (nilai_kolom1,nilai_kolom2,...);
kolom1 adalah nama kolom yang akan kita input dengan nilai_kolom1, dan kolom2 adalah nama kolom yang akan diisi dengan data pada nilai_kolom2.
Sebagai contoh, kita akan menggunakan perintah INSERT (nama_kolom)… VALUES pada MySQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql> TRUNCATE mata_kuliah;
Query OK, 0 rows affected (0.05 sec)
 
mysql> INSERT INTO mata_kuliah (kode_matkul,nama_matkul,jumlah_SKS,nama_jurusan)
VALUES ('MMDAS','Matematika Dasar',4,'Matematika');
Query OK, 1 row affected (0.05 sec)
 
mysql> select * from mata_kuliah;
+-------------+------------------+------------+--------------+
| kode_matkul | nama_matkul      | jumlah_SKS | nama_jurusan |
+-------------+------------------+------------+--------------+
| MMDAS       | Matematika Dasar |          4 | Matematika   |
+-------------+------------------+------------+--------------+
1 row in set (0.00 sec)
perintah query TRUNCATE pada baris pertama digunakan untuk mengosongkan tabel mata_kuliah, hal ini semata-mata hanya untuk keperluan agar tabel mata_kuliah kembali kosong. Silahkan abaikan perintah ini jika tidak ingin mengosongkan isi tabel terlebih dahulu. Kita akan membahas perintah TRUNCATE pada tutorial selanjutnya.
Bagaimana kalau urutan kolom kita acak? Selama perintah MySQL yang kita input sesuai  dengan urutan perintah, hal tersebut tidak menjadi masalah.
1
2
3
4
5
6
7
8
9
10
11
12
mysql> INSERT INTO mata_kuliah (nama_jurusan, kode_matkul, jumlah_SKS, nama_matkul)
VALUES ('Ilmu Komputer', 'JRKOM',2,'Jaringan Komputer');
Query OK, 1 row affected (0.04 sec)
 
mysql> select * from mata_kuliah;
+-------------+-------------------+------------+---------------+
| kode_matkul | nama_matkul       | jumlah_SKS | nama_jurusan  |
+-------------+-------------------+------------+---------------+
| JRKOM       | Jaringan Komputer |          2 | Ilmu Komputer |
| MMDAS       | Matematika Dasar  |          4 | Matematika    |
+-------------+-------------------+------------+---------------+
2 rows in set (0.00 sec)
Jika kita melihat query pada saat pembuatan tabel mata_kuliah, kolom jumlah_SKS didefinisikan dengan nilai default 2, dengan kata lain jika kolom ini tidak diisi, maka nilai default adalah 2.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
mysql> INSERT INTO mata_kuliah (kode_matkul,nama_matkul,nama_jurusan)
VALUES ('FIDAS','Fisika Dasar','Fisika'),
('CITRA','Pengolahan CITRA','Ilmu Komputer'),
('PBASE','Pengantar Database','Ilmu Komputer');
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0
 
mysql> select * from mata_kuliah;
+-------------+--------------------+------------+---------------+
| kode_matkul | nama_matkul        | jumlah_SKS | nama_jurusan  |
+-------------+--------------------+------------+---------------+
| CITRA       | Pengolahan CITRA   |          2 | Ilmu Komputer |
| FIDAS       | Fisika Dasar       |          2 | Fisika        |
| JRKOM       | Jaringan Komputer  |          2 | Ilmu Komputer |
| MMDAS       | Matematika Dasar   |          4 | Matematika    |
| PBASE       | Pengantar Database |          2 | Ilmu Komputer |
+-------------+--------------------+------------+---------------+
5 rows in set (0.00 sec)
Dalam query diatas, kita sengaja hanya mengisi 3 kolom, tanpa menginput kolom jumlah_SKS, tetapi karena nilai default kolom jumlah_SKS adalah 2, maka kolom jumlah_SKS akan tetap berisi dengan nilai.

Penggunaan Query INSERT IGNORE… VALUES

Setiap pendefinisan tabel, sebaiknya (baca: seharusnya) memiliki sebuah kolom yang didefenisikan sebagai PRIMARY KEY. Kolom dengan atribut PRIMARY KEY harus unik, dalam arti tidak boleh ada duplikasi data pada kolom tersebut. Kegunaan kolom ini adalah sebagai penanda bahwa kolom dengan nilai yang sama telah ada pada tabel.
Pada tabel mata_kuliah kita telah mendefenisikan kolom kode_matkul sebagai PRIMARY KEY, sehingga jika ada data mata_kuliah yang telah ada sebelumnya, dan kita mencoba menginput data baru dengan nilai yang sama, MySQL akan menghasilkan error, dan seluruh perintah akan dibatalkan.
Contoh query dimana kita mencoba menginput kode_matkulCITRA’ pada tabel mata_kuliah adalah sebagai berikut:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
mysql> select * from mata_kuliah;
+-------------+--------------------+------------+---------------+
| kode_matkul | nama_matkul        | jumlah_SKS | nama_jurusan  |
+-------------+--------------------+------------+---------------+
| CITRA       | Pengolahan CITRA   |          2 | Ilmu Komputer |
| FIDAS       | Fisika Dasar       |          2 | Fisika        |
| JRKOM       | Jaringan Komputer  |          2 | Ilmu Komputer |
| MMDAS       | Matematika Dasar   |          4 | Matematika    |
| PBASE       | Pengantar Database |          2 | Ilmu Komputer |
+-------------+--------------------+------------+---------------+
5 rows in set (0.00 sec)
 
mysql> INSERT INTO mata_kuliah (kode_matkul,nama_matkul, jumlah_SKS ,nama_jurusan)
VALUES ('CITRA','Pengantar CITRA',4,'Ilmu Komputer'),
('STATS','Statistika',4,'Matematika');
 
ERROR 1062 (23000): Duplicate entry 'CITRA' for key 'PRIMARY'
 
mysql> select * from mata_kuliah;
+-------------+--------------------+------------+---------------+
| kode_matkul | nama_matkul        | jumlah_SKS | nama_jurusan  |
+-------------+--------------------+------------+---------------+
| CITRA       | Pengolahan CITRA   |          2 | Ilmu Komputer |
| FIDAS       | Fisika Dasar       |          2 | Fisika        |
| JRKOM       | Jaringan Komputer  |          2 | Ilmu Komputer |
| MMDAS       | Matematika Dasar   |          4 | Matematika    |
| PBASE       | Pengantar Database |          2 | Ilmu Komputer |
+-------------+--------------------+------------+---------------+
5 rows in set (0.00 sec)
Pada query diatas kita mencoba menginput data baru dengan kode_matkul ‘CITRA’ dan ‘STATS’. Namun karena ‘CITRA’ telah ada sebelumnya pada tabel, maka MySQL akan menghasilkan error Duplicate entry ‘CITRA’ for key ‘PRIMARY’ dan tidak menjalankan penginputan ‘STATS’,walaupun  ‘STATS’ tidak terdapat duplikasi.
Untuk ‘memaksa’ MySQL tetap menjalankan perintah penginputan ‘STATS’,  dapat kita lakukan dengan menambahkan perintah opsional IGNORE. Perintah ini memaksa MySQL tetap menjalankan seluruh query walaupun terdapat error.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
mysql> select * from mata_kuliah;
+-------------+--------------------+------------+---------------+
| kode_matkul | nama_matkul        | jumlah_SKS | nama_jurusan  |
+-------------+--------------------+------------+---------------+
| CITRA       | Pengolahan CITRA   |          2 | Ilmu Komputer |
| FIDAS       | Fisika Dasar       |          2 | Fisika        |
| JRKOM       | Jaringan Komputer  |          2 | Ilmu Komputer |
| MMDAS       | Matematika Dasar   |          4 | Matematika    |
| PBASE       | Pengantar Database |          2 | Ilmu Komputer |
+-------------+--------------------+------------+---------------+
5 rows in set (0.00 sec)
 
mysql> INSERT IGNORE INTO mata_kuliah (kode_matkul,nama_matkul, jumlah_SKS ,nama_jurusan)
VALUES ('CITRA','Pengantar CITRA',4,'Ilmu Komputer'),('STATS','Statistika',4,'Matematika');
Query OK, 1 row affected (0.04 sec)
Records: 2  Duplicates: 1  Warnings: 0
 
mysql> select * from mata_kuliah;
+-------------+--------------------+------------+---------------+
| kode_matkul | nama_matkul        | jumlah_SKS | nama_jurusan  |
+-------------+--------------------+------------+---------------+
| CITRA       | Pengolahan CITRA   |          2 | Ilmu Komputer |
| FIDAS       | Fisika Dasar       |          2 | Fisika        |
| JRKOM       | Jaringan Komputer  |          2 | Ilmu Komputer |
| MMDAS       | Matematika Dasar   |          4 | Matematika    |
| PBASE       | Pengantar Database |          2 | Ilmu Komputer |
| STATS       | Statistika         |          4 | Matematika    |
+-------------+--------------------+------------+---------------+
6 rows in set (0.00 sec)
Sekarang, dengan perintah IGNORE, data ‘STATS’ akan tetap ditambahkan ke dalam tabel.

Penggunaan Query INSERT… VALUES…ON DUPLICATE KEY UPDATE…

Dalam kasus jika pada kolom kode_matkul yang telah didefenisikan sebagai PRIMARY KEY, kita inputkan nilai yang sama, MySQL akan menghasilkan error. Namun MySQL menyediakan perintah opsional untuk merubah data kolom jika ditemukan kode_matkul yang sama.
Pada kode query berikut ini kita akan mencoba menambahkan kode_matkul ‘CITRA’, dan jika terdapat kode matkul yang sama, kita akan merubah nama_matkul. Instruksi ini dapat dilakukan dengan menambahkan  ON DUPLICATE KEY UPDATE pada akhir perintah INSERT.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
mysql> select * from mata_kuliah;
+-------------+--------------------+------------+---------------+
| kode_matkul | nama_matkul        | jumlah_SKS | nama_jurusan  |
+-------------+--------------------+------------+---------------+
| CITRA       | Pengolahan CITRA   |          2 | Ilmu Komputer |
| FIDAS       | Fisika Dasar       |          2 | Fisika        |
| JRKOM       | Jaringan Komputer  |          2 | Ilmu Komputer |
| MMDAS       | Matematika Dasar   |          4 | Matematika    |
| PBASE       | Pengantar Database |          2 | Ilmu Komputer |
| STATS       | Statistika         |          4 | Matematika    |
+-------------+--------------------+------------+---------------+
6 rows in set (0.00 sec)
 
mysql> INSERT INTO mata_kuliah (kode_matkul,nama_matkul, jumlah_SKS ,nama_jurusan)
VALUES ('CITRA','Pengantar CITRA',4,'Ilmu Komputer') ON DUPLICATE KEY UPDATE
nama_matkul='Pengantar CITRA';
Query OK, 2 rows affected (0.13 sec)
 
mysql> select * from mata_kuliah;
+-------------+--------------------+------------+---------------+
| kode_matkul | nama_matkul        | jumlah_SKS | nama_jurusan  |
+-------------+--------------------+------------+---------------+
| CITRA       | Pengantar CITRA    |          2 | Ilmu Komputer |
| FIDAS       | Fisika Dasar       |          2 | Fisika        |
| JRKOM       | Jaringan Komputer  |          2 | Ilmu Komputer |
| MMDAS       | Matematika Dasar   |          4 | Matematika    |
| PBASE       | Pengantar Database |          2 | Ilmu Komputer |
| STATS       | Statistika         |          4 | Matematika    |
+-------------+--------------------+------------+---------------+
6 rows in set (0.00 sec)
Dari query diatas dapat kita perhatikan bahwa nama_matkul ‘CITRA’ telah berubah dari yang sebelumnya ‘Pengolahan Citra’ menjadi ‘Pengantar Citra’. Hal ini dimungkinkan dengan pilihan ON DUPLICATE KEY UPDATE.
ReadmoreMembuat Tabel, Input data dalam SQL