Tutorial Belajar MySQL Part 19: Cara Menambahkan data ke dalam Tabel MySQL (INSERT)

Setelah dalam tutorial sebelumnya kita mempelajari cara mengubah struktur tabel MySQL dengan query ALTER TABLE, Pada tutorial belajar MySQL kali ini kita akan mempelajari perintah (query) MySQL untuk menambahkan data ke dalam tabel menggunakan perintah INSERT.


Query INSERT untuk menambahkan data kedalam Tabel MySQL

Menambahkan sebuah data ke dalam tabel MySQL merupakan salah satu aktifitas yang paling sering dilakukan. Pembuatan database dan tabel hanya perlu dilakukan 1 kali saja, namun menginput data ke dalam tabel akan terus dilakukan sepanjang penggunaan aplikasi. Di dalam MySQL (dan juga RDBMS lainnya), kita menggunakan query INSERT untuk menambahkan data kedalam tabel.

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 di dalam database mahasiswa dengan query sebagai berikut:

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 atribut tipe data MySQL (atribut PRIMARY KEY merupakan atribut yang membuat suatu kolom dalam tabel menjadi kolom kunci, penjelasan lebih lanjut akan kita bahas pada kesempatan berikutnya)


Cara Penulisan dasar query INSERT

Mengutip manual resmi MySQL, 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] ... ]

Seperti yang terlihat, MySQL menyediakan banyak pilihan opsional untuk memasukkan data ke dalam tabel. Kita akan membahasnya secara lebih dalam pada tutorial MySQL kali ini.

Sedikit penjelasan tentang cara membaca format dasar MySQL diatas, perintah yang terdapat diantara 2 kurung siku ([…..]) adalah opsional, kita tidak harus menulis seluruh perintah tersebut, namun dari format tersebut kita dapat mengetahui berbagai opsi yang tersedia yang dapat digunakan.

Cara 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 diinput, 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:

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 dan Tutorial MySQL Tipe Data Numerik, bahwa untuk kolom yang berisi karakter (string), harus situlis di dalam tanda petik ('), dan sebaliknya untuk kolom yang berisi nilai numerik harus ditulis tanpa tanda petik.

Jika kita ingin langsung memasukkan 2 baris data atau lebih dalam satu perintah query INSERT MySQL, 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:

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 dengan cara penulisan query INSERT… VALUES.


Cara 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 digunakan. Untuk keperluan tersebut, MySQL menyediakan variasi query 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. Urutan nama kolom dengan nilai yang akan diisi harus sesuai.

Sebagai contoh, kita akan menggunakan perintah INSERT (nama_kolom)… VALUES pada MySQL:

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 kolom yang ditulis, hal tersebut tidak menjadi masalah.

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 2 akan digunakan untuk kolom jumlah_SKS.

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, saya 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.


Cara Penggunaan Query INSERT IGNORE… VALUES

Dalam setiap pendefinisan tabel, sebaiknya (baca: seharusnya) sebuah tabel memiliki satu 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 bisa diinput 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.

Sebagai contoh query, saya akan mencoba menginput kode_matkul: 'CITRA' pada tabel mata_kuliah. Nilai 'CITRA' ini sebenarnya sudah tersedia di dalam tabel:

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 saya mencoba menginput 2 buah 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' sebenarnya belum tersedia di dalam tabel.

Untuk 'memaksa' MySQL tetap menjalankan perintah penginputan 'STATS',  kita bisa menambahkan perintah opsional IGNORE. Perintah ini memaksa MySQL tetap menjalankan seluruh query walaupun terdapat error.

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, walaupun di dalam query saya ada error (nilai CITRA terjadi duplikasi), namun nilai 'STATS' akan tetap ditambahkan ke dalam tabel.


Cara Penggunaan Query INSERT… VALUES…ON DUPLICATE KEY UPDATE…

Dalam query INSERT … IGNORE sebelumnya, MySQL akan mengabaikan error jika terdapat nilai kode_matkul yang ganda. Tetapi MySQL juga menyediakan perintah opsional lain untuk menangani duplikasi data dengan meng-update nilai kolom lain. Penjelasan ini akan lebih mudah jika menggunakan contoh.

Pada contoh query berikut ini saya akan mencoba menambahkan kode_matkul: 'CITRA', dan jika terdapat kode matkul yang sama, saya ingin merubah nama_matkul. Instruksi ini dapat dilakukan dengan menambahkan perintah ON DUPLICATE KEY UPDATE pada akhir query INSERT. Berikut adalah contoh penggunaannya:

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 sebelumnya 'Pengolahan Citra' menjadi 'Pengantar Citra'. Hal ini dimungkinkan dengan pilihan ON DUPLICATE KEY UPDATE.


Demikian pembahasan kita kali ini tentang query INSERT MySQL, Query INSERT menyediakan cara input data ke tabel dengan cepat. Namun untuk jika kita memiliki data dalam jumlah besar, MySQL menyediakan fasilitas untuk input langsung dari file external, pembahasan tentang ini akan kita bahas pada tutorial belajar MysQL selanjutnya: Cara Menambahkan data dari File (LOAD DATA INFILE).

91 Comments

  1. Juliar Nasution
    23 Mar 14
  2. adhi
    17 May 14
    • Andre
      17 May 14
  3. Aryo
    25 Jun 14
  4. Alzara
    07 Sep 14
    • Andre
      09 Sep 14
  5. achaidris
    02 Apr 15
    • Andre
      05 Apr 15
  6. Ikhwan
    29 Apr 15
  7. yoga
    11 May 15
    • Andre
      11 May 15
  8. Yohanes Eka
    25 May 15
    • Andre
      26 May 15
  9. Alfin
    31 May 15
    • Andre
      31 May 15
  10. Graldi
    24 Jun 15
    • Andre
      25 Jun 15
  11. Erlangga
    26 Jul 15
    • Andre
      28 Jul 15
  12. Hafidz
    06 Aug 15
    • Andre
      06 Aug 15
  13. melani
    27 Aug 15
  14. melani
    30 Aug 15
    • Andre
      30 Aug 15
      • melani
        01 Sep 15
  15. melani
    01 Sep 15
    • Andre
      01 Sep 15
      • melani
        01 Sep 15
        • Andre
          03 Sep 15
  16. Sarah
    25 Nov 15
  17. Ahmad Fauzi
    15 Oct 16
  18. Fathya
    19 Nov 16
  19. Jul
    30 Nov 16
    • Andre
      01 Dec 16
  20. yoko
    06 Feb 17
    • Andre
      06 Feb 17
  21. Mira
    09 Feb 17
  22. Mira
    09 Feb 17
    • Andre
      11 Feb 17
  23. MRx
    17 Mar 17
    • Andre
      18 Mar 17
  24. aries
    25 Mar 17
    • Andre
      26 Mar 17
  25. Firmansyah
    14 May 17
    • Andre
      14 May 17
  26. sriayu mentari
    02 Jun 17
  27. Andi Saputra Siahaan
    11 Jun 17
    • Andre
      11 Jun 17
  28. Dankee
    30 Oct 17
    • Andre
      31 Oct 17
  29. Aji Saputro
    01 Nov 17
  30. Amat
    16 Apr 18
    • Andre
      24 Apr 18
        • Andre
          15 Aug 18
  31. Sirad
    10 Jun 18
    • Andre
      11 Jun 18
  32. iwan_setiawan
    29 Oct 18
  33. Agus Mulyana
    08 Nov 18
    • Andre
      09 Nov 18
  34. abi
    20 Dec 18
  35. Masroni
    06 Apr 19
    • Andre
      08 Apr 19
  36. Dede Hidayat
    08 Apr 19
    • Dede Hidayat
      08 Apr 19
    • Andre
      09 Apr 19
      • Dede Hidayat
        10 Apr 19
        • Andre
          11 Apr 19
  37. Anonymous
    20 Apr 19
  38. Masroni
    12 Jan 20
    • Andre
      15 Jan 20
  39. herdot
    18 Jan 20
  40. Danang
    01 May 20
    • Andre
      02 May 20
  41. Fajar P
    18 May 20
  42. Anonim
    01 Jun 20
  43. Andre Sabon
    09 Dec 20
    • Andre
      10 Dec 20
  44. Erza
    24 Nov 21
    • Andre
      25 Nov 21
    • Alfan
      18 Jul 22
  45. hafidz
    21 Aug 23

Add Comment