Friday, March 16, 2012

MySQL : Handling Error Duplicate Entry

Pada database MySQL terkadang ketika malakukan manipulasi data menghasilkan error seperti Duplicate Entry, Can't write because of unique constraint dan sebagainya.

Pada database MySQL telah menyediakan statement query untuk menangani error yang terjadi ketika proses manipulasi data.

Pada posting ini akan mengambil contoh melakukan handling/penanganan error untuk kasus Duplicate Entry menggunakan On Duplicate Key Update.

Duplicate Entry adalah sebuah error yang terjadi karena data yang akan di inputkan pada table sudah ada.

On Duplicate Key Update adalah sebuah statemen yang di kombinasikan dengan statement Insert sehingga apabila terjadi error saat proses Insert Data maka secara otomatis akan dialihkan menjadi proses Update Data.

Berikut ini adalah cara penerapan Handling Error Duplicate Entry menggunakan On Duplicate Key Update.

Sebagai contoh terdapat sebuah tabel bernama kelas_tingkat dengan stuktur seperti dibawah ini.
mysql> desc  kelas_tingkat;

+-------------------------+--------------+------+-----+---------+-------+
| Field                   | Type         | Null | Key | Default | Extra |
+-------------------------+--------------+------+-----+---------+-------+
| kode                    | char(5)      | NO   | PRI | NULL    |       |
| deskripsi               | varchar(255) | NO   |     | NULL    |       |
| const_jenjangpendidikan | varchar(9)   | NO   |     | NULL    |       |
| singkatan               | varchar(8)   | YES  |     | NULL    |       |
+-------------------------+--------------+------+-----+---------+-------+
4 rows in set (0.09 sec)
Struktur tabel diatas terdapat PRIMARY KEY pada field KODE, maka secara otomatis akan memberikan batasan bahwa data pada field KODE harus bersifat UNIK apabila tidak unik akan menghasilkan error Duplicate Entry.

Berikut ini adalah contoh error yang terjadi apabila terdapat data yang sama pada field KODE
insert kelas_tingkat
 set kode = 'ALB-1',
   deskripsi =  'Deskripsi bla... bla...',
   const_jenjangpendidikan  = '001',
   singkatan  = 'Singkatan bla... bla..'
ERROR 1062 (23000): Duplicate entry 'ALB-1' for key 'PRIMARY'
Error di atas menjelaskan bahwa data ALB-1 telah ada pada field KODE sehingga menampilkan error Duplicate entry.

Apabila menginginkan ketika terjadi error Duplicate Entry secara otomatis melakukan operasi Update data berdasarkan kode yang di inputkan, maka alternatif yang bisa digunakan adalah dengan memberikan statemen On Duplicate Key Update seperti contoh dibawah ini.
insert kelas_tingkat
 set kode = 'ALB-1',
   deskripsi =  'Deskripsi bla... bla...',
   const_jenjangpendidikan  = '001',
   singkatan  = 'Singkatan bla... bla..'
 on duplicate key update
   deskripsi =  'Deskripsi bla... bla...',
   const_jenjangpendidikan  = 'Deskripsi bla... bla...',
   singkatan  = 'Singkatan bla.. bla..';
Query OK, 1 row affected, 1 warning (0.03 sec)
Query diatas melakukan handling/penanganan apabila terjadi error Duplicate Entry maka secara otomatis akan melakukan Update Data.

Bagian penting pada query diatas terletakan pada baris yang dimulai dari On Duplicate Key Update, yaitu sebagai berikut.
 ...
 on duplicate key update
   deskripsi =  'Deskripsi bla... bla...',
   const_jenjangpendidikan  = 'Deskripsi bla... bla...',
   singkatan  = 'Singkatan bla.. bla..';
Statemen diatas adalah bagian yang melakukan Update Data secara otomatis ketika terjadi error Duplicate Entry.

6 comments:

  1. Untuk memasukkan statement "on duplicate key update" saya harus ke bagian mana?

    ReplyDelete
    Replies
    1. Di tulis di query insertnya saja, seperti contoh di bawah ini.

      insert kelas_tingkat
      set kode = 'ALB-1',
      deskripsi = 'Deskripsi bla... bla...',
      const_jenjangpendidikan = '001',
      singkatan = 'Singkatan bla... bla..'
      on duplicate key update
      deskripsi = 'Deskripsi bla... bla...',
      const_jenjangpendidikan = 'Deskripsi bla... bla...',
      singkatan = 'Singkatan bla.. bla..';

      Delete
  2. Terima kasih infonya mas..
    Akhirnya blog saya bisa balik lagi..

    ReplyDelete
  3. terima kasih mas bro
    bermanfaat banget
    ane baru tau kalo mysql punya fungsi seperti itu

    ReplyDelete
  4. Cara ini bisa dipakai untuk pengambilan data ga? Maksudnya datanya bukan yang diinput gitu, tapi diambil yang dari web

    ReplyDelete