SQL Insert dipakai untuk menambah data gres ke sebuah tabel. Terdapat beberapa cara untuk menuliskan sintaks insert. Kita akan membahasnya disini. Sebagai pola masalah kita akan menggunakan tabel berjulukan `kategori` yang ada dalam database `latihan` dengan struktur sebagai berikut:
Basic
Cara paling sederhana untuk input satu baris gres ialah menggunakan sintaks INSERT INTO dan menuliskan masing-masing nilai untuk semua kolom yang ada pada tabel tersebut. Jika tabel ada 10 kolom maka seluruhnya mesti diisi nilainya.
INSERT INTO kategori
VALUES ('K003', 'Berita Media Cetak', '2010-05-14 15:15:32', 'rani',
'2019-12-11 15:15:32', 'rani')
'2019-12-11 15:15:32', 'rani')
Kolom modifieddate dan modifiedby merupakan log untuk pergeseran data yang boleh bernilai NULL. Karena ketika pertama kali insert data tercatat waktu dan user pembuatnya. Contoh Insert dengan nilai NULL yaitu sebagai berikut:
INSERT INTO klasifikasi
VALUES ('K003', 'Berita Media Cetak', '2010-05-14 15:15:32',
'rani', NULL, NULL)
'rani', NULL, NULL)
Dengan Menyebutkan Nama Field yang akan Diinput Nilai
Menyebutkan nama field yang mau diisi nilai pada query insert sungguh diusulkan alasannya:
- Tidak harus mengingat urutan kolom mirip dalam struktur tabel.
- Tidak perlu memilih 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) jikalau ada perubahan kolom mirip ditambah atau dihapus dari tabel. Sehingga sesudah kolom disertakan atau dihapus dari tabel. Sintaks mesti diganti lagi sesuai urutan kolom yang gres 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 namun ternyata INSERT MySQL mampu dikerjakan dengan cara mirip ini. Kelebihan menggunakan SET yakni membuat lebih mudah membaca query ketika kolom dalam table sungguh banyak. Tetapi cara ini hanya mampu menginput data 1 baris saja.
INSERT INTO klasifikasi SET
kodekategori ='K003',
namakategori='Berita Media Cetak',
createddate='2010-05-14 15:15:32',
createdby='rani';
Insert Banyak Baris (Rows) Sekaligus
Insert data dapay dijalankan eksklusif 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', NULL, NULL),
('K002', 'Non Fiksi', '2010-05-14 15:15:32', 'rani', NULL, NULL),
('K003', 'Berita Media Cetak', '2010-05-14 15:15:33', 'rani', NULL, NULL);
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 mampu dilaksanakan, tentukan jumlah dan urutan kolom yang dihasilkan dari SELECT sesuai dengan kolom tabel atau list kolom yang terdapat dalam sintaks INSERT.
Sebagai teladan kita akan mengambil data yang ada di tabel kategori_beta untuk disimpan di tabel kategori.
Sebagai teladan kita akan mengambil data yang ada di tabel kategori_beta untuk disimpan di tabel kategori.
INSERT INTO klasifikasi
SELECT kodekategori, namakategori, createddate, createdby,
modifieddate, modifiedby FROM kategori_beta
INSERT INTO kategori(kodekategori,namakategori,createddate,createdby)
SELECT kodekategori, namakategori, createddate, createdby FROM kategori_beta
Mencegah Error Duplikat Data dengan INSERT IGNORE
Sintaks ini mampu digunakan untuk menanggulangi error data unik/primary key jikalau kita ingin mengabaikan proses INSERT jikalau data sudah ada.
Kita lihat pola data sebelum di insert:
Query yang dipakai:
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 telah digunakan sebelumnya, maka tidak ada pergeseran:
Namun akan berlaku INSERT biasa jika tidak didapatkan 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 menjajal mengubah data sebelum nya dengan PK K003 secara keseluruhan sehingga terlihat pergeseran masing-masing kolom.
REPLACE INTO klasifikasi
(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 mirip INSERT biasa jika tidak ditemukan primary key atau unique constrain yang serupa.
Mencegah Error Duplikat Data dengan INSERT ... ON DUPLICATE KEY UPDATE
Ketika Insert dilakukan dan data unik sudah ada kita cuma ingin update beberapa kolom tertentu saja, kita bisa memakai 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 berlainan seluruhnya dengan data yang ada dalam baris bersangkutan (kecuali primary key) untuk melihat imbas update berlaku pada kolom mana saja.
Disini kalau terjadi duplikat maka hanya akan mengubah kolom namakategori, modifieddate 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 cuma 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 serupa.
Lihat tutorial selengkap nya pada link di bawah ini:
Tutorial MySQL
EmoticonEmoticon