Minggu, 08 September 2013

Fakta Seputar Query INSERT di SQL

Kita tentu telah mengenal bentuk query yang satu ini. Ya… query INSERT dalam database yang mendukung SQL digunakan untuk menyisipkan record atau data ke dalam tabel. Saya kira mengenal saja tidak cukup, tapi lebih dari itu kita harus bisa menggunakannya dengan baik dan benar, seperti halnya berbahasa Indonesia :-) (gak nyambung ya…)
Mungkin ada di antara Anda yang protes pada saya, ngapain sih kok nulis artikel ini. Kan query INSERT itu mudah sekali. Iya sih.. mudah bagi Anda yang sudah expert tapi hal baru bagi para newbie. Toh… Anda dulu (yang expert) pernah jadi newbie juga :-)
Alasan ditulisnya artikel ini tak lain adalah sering saya jumpai keluhan baik itu rekan2 sesama programmer pemula, mahasiswa maupun pengunjung blog ini yang sering gagal dalam menjalankan query INSERT ini. Salah satunya adalah pengunjung blog saya ini. Mereka menganggap query SQL yang diberikan sudah benar, tapi mengapa data atau record tak jua tersimpan dalam tabel. Mudah-mudahan dengan artikel ini bisa sedikit menjawab semua kesulitan yg dihadapi tsb.

OK… untuk studi kasus, misalkan saya berikan sebuah tabel sebagai berikut

1.CREATE TABLE sampel (
2.field1 int(11) auto_increment,
3.field2 varchar(10),
4.field3 date,
5.field4 float,
6.field5 text,
7.PRIMARY KEY  (field1)
8.);
Dalam tabel tersebut saya sengaja memberikan beberapa variasi tipe data pada setiap fieldnya, dengan Primary Key nya adalah ‘field1′ dengan tipe data integer dan auto increment.
Nah.. secara umum, bila kita ingin menyisipkan sebuah record ke dalam tabel menggunakan query SQL maka menggunakan sintaks sbb:

1.INSERT INTO namaTabel (field1, field2, field3, ..., fieldn)
2.VALUES ('value1', 'value2', 'value3', ..., 'valuen');
Sintaks tersebut memiliki makna kita akan menyisipkan data atau record dengan ‘value1′ merupakan nilai yang bersesuaian dengan ‘field1′, ‘value2′ bersesuaian dengan ‘field2′, dst.
Namun… yang menjadi pertanyaan adalah, Apakah susunan urutan penulisan field dalam query INSERT tersebut harus selalu sama dengan urutan field dalam tabel? Jawabnya adalah TIDAK. Anda bisa saja membolak-balik urutan field dalam penulisan query nya, asal… valuenya juga menyesuaikan. Contohnya:

1.INSERT INTO namaTabel (field2, field1, field3, ..., fieldn)
2.VALUES ('value2', 'value1', 'value3', ..., 'valuen');
Trus.. ada pertanyaan lagi yang lain, Apakah dalam menuliskan query INSERT ini semua field dalam tabel harus dituliskan setelah nama tabel? Jawabnya adalah TIDAK. Anda dapat menyisipkan record hanya pada field-field tertentu saja. Contohnya kita akan menyisipkan record pada tabel studi kasus di atas hanya pada ‘field2′, dan ‘field3′ saja

1.INSERT INTO sampel (field2, field3)
2.VALUES ('Hallo', '2009-10-12');
Catatan:
khusus untuk tipe data DATE, format value yang bisa disimpan adalah dalam bentuk ‘yyyy-mm-dd’.
Mungkin Anda bertanya lagi, Bagaimana bila tabel tersebut memuat field yang merupakan ‘AUTO INCREMENT’? value dalam query INSERT nya diisi dengan apa?
Ya… karena dia auto increment, nama field dan value tidak usah dituliskan, karena nanti akan diisi secara otomatis oleh sistem. Sebagai contoh adalah query berikut ini yang menyisipkan record pada tabel ‘sampel’ di atas pada semua field kecuali ‘field1′ yang merupakan auto increment.

1.INSERT INTO sampel (field2, field3, field4, field5)
2.VALUES ('Hallo', '2009-10-12', '2.89', 'Ini Sebuah Text');
Perhatikan contoh query di atas, bahwa untuk semua value, tidak peduli tipe data fieldnya apa, diapit dengan tanda petik.
Oya.. harap hati-hati dengan penggunaan bentuk query ini, karena field-field yang merupakan PRIMARY KEY (namun bukan AUTO INCREMENT) harus diisikan valuenya.
Sebagai contoh, misalkan suatu tabel terdapat 3 field ‘field1′, ‘field2′, dan ‘field3′ dimana ‘field1′ nya merupakan PRIMARY KEY (bukan auto increment).
Jika kita berikan query INSERT sbb:

1.INSERT INTO namaTabel (field2, field3)
2.VALUES ('value2', 'value3');
maka akan terjadi ERROR, karena ‘field1′ nantinya akan kosong (tidak ada valuenya).
Selain bentuk atau sintaks query yang disebutkan di atas, ada pula query INSERT dengan bentuk sbb:

1.INSERT INTO namaTabel
2.VALUES ('value1', 'value2', ..., 'valuen');
Perbedaan yang kentara dari query ini dengan sebelumnya hanyalah tidak menyebutkan nama-nama field pada query.
Nah… apa perbedaan makna penulisan query tersebut dengan sebelumnya?
Ya.. perbedaannya adalah, bahwa dengan bentuk query tersebut, Anda harus urut dalam menuliskan valuenya (sesuai urutan field dalam tabel) dan juga jumlah value yang Anda tuliskan harus sama dengan jumlah field yang ada dalam tabel tersebut, atau dengan kata lain bentuk query INSERT tersebut akan mengisi record untuk semua field yang ada dalam tabel.
Sebagai contoh misalkan dalam suatu tabel terdapat field dengan urutan sbb:
field1, field2, field3
dan kemudian Anda memberikan query INSERT sbb:

1.INSERT INTO namaTabel
2.VALUES ('value1', 'value2', 'value3');
maka ‘value1′ ini akan mengisi ‘field1′, ‘value2′ mengisi ‘field2′ dan ‘value3′ mengisi ‘field3′ (sesuai urutan field dalam tabel)
Sedangkan jika Anda menuliskan query INSERT sbb:

1.INSERT INTO namaTabel
2.VALUES ('value1', 'value2');
maka akan terjadi error, karena jumlah field dalam tabel tidak sama dengan jumlah valuenya.
Trus… mungkin ada pertanyaan lagi, jadi… bisakah kita gunakan bentuk query INSERT terakhir ini untuk menyisipkan record ke dalam tabel yang di dalamnya terdapat auto increment? Jawabnya adalah.. sebaiknya JANGAN, karena field auto increment ini akan diisi otomatis oleh sistem, jadi.. sebaiknya gunakan bentuk sintaks INSERT pertama di atas.
OK… mudah-mudahan artikel ini bermanfaat bagi Anda, terutama yang masih sering salah dalam menyisipkan record ke dalam tabel.

Tidak ada komentar :

Posting Komentar