SQL Insert

SQL Insert digunakan untuk menambah data baru ke sebuah tabel. Terdapat beberapa cara untuk menuliskan sintaks insert. Kita akan membahasnya disini. Sebagai contoh kasus kita akan menggunakan tabel bernama `kategori` yang ada dalam database `latihan` dengan struktur sebagai berikut:


Basic

Cara paling sederhana untuk input satu baris baru adalah menggunakan sintaks INSERT INTO dan menuliskan masing-masing nilai untuk semua kolom yang ada pada tabel tersebut. Jika tabel ada 10 kolom maka semuanya harus diisi nilainya.

INSERT INTO kategori
VALUES ('K003', 'Berita Media Cetak', '2010-05-14 15:15:32', 'rani',
'2019-12-11 15:15:32', 'rani')

Kolom modifieddate dan modifiedby merupakan log untuk perubahan data yang boleh bernilai NULL. Karena saat pertama kali insert data tercatat waktu dan user pembuatnya. Contoh Insert dengan nilai NULL adalah sebagai berikut:

INSERT INTO kategori
VALUES ('K003''Berita Media Cetak''2010-05-14 15:15:32',
'rani'NULLNULL)

Dengan Menyebutkan Nama Field yang akan Diinput Nilai

Menyebutkan nama field yang akan diisi nilai pada query insert sangat direkomendasikan karena:

  • Tidak harus mengingat urutan kolom seperti dalam struktur tabel.
  • Tidak perlu menentukan nilai untuk semua kolom, hanya yang diperlukan saja.
  • Jika ada banyak kolom, lebih mudah untuk mencocokkan nilai dengan kolom yang dimaksud. 
  • Sintaks INSERT tanpa daftar kolom akan menjadi tidak valid (error) jika ada perubahan kolom seperti ditambah atau dihapus dari tabel. Sehingga setelah kolom ditambahkan atau dihapus dari tabel. Sintaks harus diganti lagi sesuai urutan kolom yang baru supaya berfungsi kembali.

INSERT INTO kategori (kodekategori,namakategori,createddate,createdby)
VALUES ('K003''Berita Media Cetak''2010-05-14 15:15:32''rani')

Menggunakan Sintaks SET

Meskipun jarang digunakan tapi ternyata INSERT MySQL dapat dilakukan dengan cara seperti ini. Kelebihan menggunakan SET adalah memudahkan membaca query saat kolom dalam table sangat banyak. Tetapi cara ini hanya dapat menginput data 1 baris saja.

INSERT INTO kategori SET
  kodekategori ='K003',
  namakategori='Berita Media Cetak',
  createddate='2010-05-14 15:15:32',
  createdby='rani';

Insert Banyak Baris (Rows) Sekaligus

Insert data dapay dilakukan langsung beberapa baris dalam satu sintaks INSERT dengan memisahkan set nilai dalam beberapa tanda kurung.

INSERT INTO kategori
VALUES ('K001', 'Fiksi', '2010-05-14 15:15:31', 'rani', NULLNULL),
('K002', 'Non Fiksi', '2010-05-14 15:15:32''rani'NULLNULL),
('K003', 'Berita Media Cetak', '2010-05-14 15:15:33''rani'NULLNULL);

atau

INSERT INTO kategori(kodekategori,namakategori,createddate,createdby)
VALUES ('K001''Fiksi''2010-05-14 15:15:31''rani'),
('K002''Non Fiksi''2010-05-14 15:15:32''rani'),
('K003''Berita Media Cetak''2010-05-14 15:15:33''rani');

Insert dari Hasil Query

Insert data dari query atau sintaks SELECT juga dapat dilakukan, pastikan jumlah dan urutan kolom yang dihasilkan dari SELECT sesuai dengan kolom tabel atau list kolom yang terdapat dalam sintaks INSERT.

Sebagai contoh kita akan mengambil data yang ada di tabel kategori_beta untuk disimpan di tabel kategori.


INSERT INTO kategori
SELECT kodekategori, namakategori, createddate, createdby, 
modifieddate, modifiedby FROM kategori_beta

atau

INSERT INTO kategori(kodekategori,namakategori,createddate,createdby)
SELECT kodekategori, namakategori, createddate, createdby FROM kategori_beta

Mencegah Error Duplikat Data dengan INSERT IGNORE

Sintaks ini dapat digunakan untuk menangani error data unik/primary key jika kita ingin mengabaikan proses INSERT jika data sudah ada.
Kita lihat contoh data sebelum di insert:


Query yang digunakan:

INSERT IGNORE INTO kategori 
(kodekategori,namakategori,createddate,createdby, modifieddate,modifiedby)
VALUES ('K003', 'Berita Media Terikini', '2010-05-14 15:15:32'
'rani', '2019-12-14 15:15:32', 'rani')

Setelah INSERT IGNORE karena primary key sudah digunakan sebelumnya, maka tidak ada perubahan:


Namun akan berlaku INSERT biasa jika tidak ditemukan primary key atau unique constrain yang sama.

Mencegah Error Duplikat Data dengan REPLACE INTO

Berbeda dengan Insert Ignore, sintaks ini akan menghapus baris data yang sudah ada dan menggantikan dengan yang baru. Kita akan mencoba mengubah data sebelum nya dengan PK K003 secara keseluruhan sehingga terlihat perubahan masing-masing kolom.

REPLACE INTO kategori 
(kodekategori,namakategori,createddate,createdby, modifieddate,modifiedby)
VALUES ('K003''Berita Media Terikini''2019-012-14 11:11:11'
'irsan''2019-12-15 05:10:55''irsan')

Hasilnya seluruh nilai baris tergantikan (kecuali primary key)


Query akan berlaku seperti INSERT biasa jika tidak ditemukan primary key atau unique constrain yang sama.

Mencegah Error Duplikat Data dengan INSERT ... ON DUPLICATE KEY UPDATE

Ketika Insert dijalankan dan data unik sudah ada kita hanya ingin update beberapa kolom tertentu saja, kita bisa menggunakan sintaks ON DUPLICATE KEY ini. Tidak seperti REPLACE INTO yang mengubah sepenuhnya.

Status nilai data terakhir sebelum mengeksekusi on duplicate key update:


Query dibuat dengan nilai berbeda seluruhnya dengan data yang ada dalam baris bersangkutan (kecuali primary key) untuk melihat efek update berlaku pada kolom mana saja.
Disini jika terjadi duplikat maka hanya akan mengubah kolom namakategorimodifieddate dan modifiedby saja.

INSERT INTO kategori 
(kodekategori,namakategori,createddate,createdby, modifieddate,modifiedby)
VALUES ('K003', 'Berita Media Terpercaya', '2018-11-14 22:22:22', 
'ibenk', '2019-11-15 15:12:11', 'ibenk') 
ON DUPLICATE KEY UPDATE namakategori = VALUES(namakategori), 
modifieddate = VALUES(modifieddate), modifiedby = VALUES(modifiedby);

Hasilnya:


Jika terjadi duplikasi maka query hanya akan mengupdate data yang didefinisikan di klausa ON DUPLICATE KEY UPDATE

Sementara akan berlaku INSERT biasa jika tidak ditemukan primary key atau unique constrain yang sama.

Lihat tutorial selengkap nya pada link di bawah ini:

Tutorial MySQL


Post a Comment

0 Comments