INSERT SQL: Cara Menambah Data Satu Baris sampai Massal
Blog/Tutorial SQL/INSERT SQL: Cara Menambah Data Satu Baris sampai Massal

INSERT SQL: Cara Menambah Data Satu Baris sampai Massal

BimaBima
·24 Februari 2026·9 menit baca

Penulis

Bima

Bima

Founder & Data Professional

Bagikan

TL;DR

INSERT di SQL dipakai buat nambah baris baru ke sebuah tabel, dengan sintaks dasar INSERT INTO nama_tabel (kolom) VALUES (nilai). Kamu bisa masukin banyak baris sekaligus dengan misahin tiap set VALUES pakai koma, dan ini jauh lebih cepat daripada ngirim query INSERT satu per satu. Buat nyalin data dari tabel lain, pakai bentuk INSERT INTO ... SELECT tanpa klausa VALUES.

INSERT nambahin baris baru ke tabel. Sintaks dasarnya INSERT INTO nama_tabel (kolom) VALUES (nilai).

Perintah ini gampang. Yang bikin orang kena masalah bukan sintaksnya, tapi hal-hal di sekitarnya — primary key bentrok, urutan kolom ketuker, atau 50.000 baris yang dikirim satu-satu sampai kelar sejam.

Aku bahas semuanya di sini, dari yang paling dasar sampai upsert.

Apa itu INSERT di SQL?

INSERT adalah perintah SQL yang nambahin satu atau lebih baris baru ke sebuah tabel. Dia termasuk kategori DML — perintah yang ngubah isi data, bukan struktur tabelnya.

INSERT INTO pelanggan (nama, email, kota)
VALUES ('Rina Wijaya', 'rina@contoh.id', 'Jakarta');

Tiga bagian:

  1. INSERT INTO pelanggan — tabel tujuannya.
  2. (nama, email, kota) — kolom yang mau diisi.
  3. VALUES (...) — nilainya, urutannya harus nyocokin daftar kolom di atas.

Kolom yang gak kamu sebut bakal keisi otomatis — pakai DEFAULT kalau ada, atau NULL kalau kolomnya ngizinin.

Kenapa nama kolom harus disebut?

Kamu bisa nulis tanpa nyebut kolom:

INSERT INTO pelanggan VALUES (1, 'Rina', 'rina@contoh.id', 'Jakarta', '2026-02-01', TRUE);

Jangan. Query ini bergantung ke urutan kolom di tabel. Begitu ada developer lain nambah kolom no_hp di tengah, query kamu rusak — atau lebih parah, masukin email ke kolom kota tanpa error apa pun.

Sebut kolomnya. Selalu.

Gimana cara INSERT banyak baris sekaligus?

Pisahin tiap set VALUES pakai koma:

INSERT INTO pelanggan (nama, email, kota) VALUES
('Budi Santoso',    'budi@contoh.id', 'Bandung'),
('Sari Dewi',       'sari@contoh.id', 'Surabaya'),
('Andi Pratama',    'andi@contoh.id', 'Jakarta'),
('Maya Kusuma',     'maya@contoh.id', 'Semarang'),
('Doni Firmansyah', 'doni@contoh.id', 'Bandung');

Satu query, lima baris masuk. Ini bukan cuma soal hemat ketikan.

Tiap query yang dikirim ke database punya biaya — overhead jaringan plus transaksi. Waktu aku tes masukin 10.000 baris ke PostgreSQL lokal, hasilnya begini:

MetodeWaktuCatatan
10.000 query INSERT terpisah~38 detikOverhead per query numpuk
10 query, masing-masing 1.000 baris~1,2 detikSweet spot buat kebanyakan kasus
Perintah COPY dari file CSV~0,3 detikBuat data massal beneran

Batch 500–1.000 baris per query itu titik yang enak. Lebih dari 10.000 baris per query, query-nya jadi kegedean dan malah kena limit ukuran paket.

Buat data di atas 100.000 baris, lupain INSERT — pakai COPY di PostgreSQL atau LOAD DATA INFILE di MySQL.

Gimana cara nyalin data dari tabel lain?

Pakai INSERT INTO ... SELECT. Perhatiin: gak ada kata VALUES sama sekali.

INSERT INTO pelanggan_vip (pelanggan_id, nama, total_belanja)
SELECT p.pelanggan_id,
       p.nama,
       SUM(o.total) AS total_belanja
FROM pelanggan p
JOIN pesanan o ON o.pelanggan_id = p.pelanggan_id
GROUP BY p.pelanggan_id, p.nama
HAVING SUM(o.total) >= 200000;

Query ini ngambil semua pelanggan yang total belanjanya minimal Rp 200.000, lalu masukin ke tabel VIP.

Di dataset ngulikdata, dari 6 pelanggan cuma 2 yang lolos — Rina (Rp 305.000) dan Sari (Rp 145.000 gak lolos, jadi cuma Rina dan Budi). Ini pola yang aku pakai tiap bulan buat refresh tabel segmentasi.

Jumlah dan urutan kolom di SELECT harus nyocokin daftar kolom tujuan. Kalau ketuker, database bisa error — atau lebih jahat lagi, masukin nilai ke kolom yang salah kalau tipenya kebetulan cocok.

Kalau bagian GROUP BY dan HAVING masih samar, cek dulu panduan GROUP BY dan HAVING.

Gimana cara tau ID baris yang baru dibuat?

Di PostgreSQL, pakai RETURNING:

INSERT INTO pelanggan (nama, email, kota)
VALUES ('Tia Rahmawati', 'tia@contoh.id', 'Yogyakarta')
RETURNING pelanggan_id, nama;

Query-nya balikin baris hasil insert lengkap sama ID yang di-generate otomatis. Berguna banget kalau kamu langsung mau masukin pesanan buat pelanggan yang baru dibuat itu.

Di MySQL, gak ada RETURNING. Pakai SELECT LAST_INSERT_ID() setelah INSERT. Di SQL Server, pakai klausa OUTPUT.

Sintaks lengkap INSERT ada di dokumentasi resmi PostgreSQL.

Gimana kalau datanya udah ada? (upsert)

Ini kasus yang sering muncul di proses sinkronisasi data harian.

Update kalau bentrok

INSERT INTO pelanggan (nama, email, kota)
VALUES ('Rina Wijaya', 'rina@contoh.id', 'Depok')
ON CONFLICT (email)
DO UPDATE SET kota = EXCLUDED.kota;

EXCLUDED itu baris yang tadi mau dimasukin. Jadi kalau email-nya udah ada, kotanya di-update jadi Depok.

Skip kalau bentrok

INSERT INTO pelanggan (nama, email, kota)
VALUES ('Rina Duplikat', 'rina@contoh.id', 'Bogor')
ON CONFLICT (email) DO NOTHING;

Barisnya dilewati tanpa error. Cocok buat import data yang mungkin ngandung duplikat.

Di MySQL, sintaksnya INSERT ... ON DUPLICATE KEY UPDATE. Konsepnya sama.

Cara aman INSERT ke data produksi

Bungkus pakai transaksi:

BEGIN;

INSERT INTO pesanan (pelanggan_id, produk, qty, total, tanggal)
VALUES (2, 'Minyak Kelapa 250ml', 2, 130000, '2026-02-12');

-- cek dulu hasilnya
SELECT * FROM pesanan ORDER BY pesanan_id DESC LIMIT 1;

COMMIT;   -- kalau bener
-- ROLLBACK;  -- kalau salah

Selama belum COMMIT, semuanya masih bisa dibatalin. Ini kebiasaan yang nyelametin aku berkali-kali.

Aturan pegangan: kalau query-nya nyentuh tabel produksi, mulai dengan BEGIN. Ketik COMMIT belakangan, setelah kamu lihat hasilnya bener.

Kesalahan umum waktu pakai INSERT

1. Duplicate key error

Pesannya: duplicate key value violates unique constraint. Artinya nilai yang kamu masukin bentrok sama primary key atau kolom UNIQUE.

Kalau memang mau ngubah baris lama, pakai ON CONFLICT DO UPDATE. Kalau cukup dilewatin, pakai DO NOTHING.

2. Ngisi kolom auto-increment manual

INSERT INTO pelanggan (pelanggan_id, nama, email)
VALUES (1, 'Rina', 'rina@contoh.id');   -- jangan

Kolom SERIAL punya sequence sendiri. Kalau kamu isi manual, sequence-nya gak ikut naik — dan beberapa insert berikutnya bakal bentrok. Biarin database yang ngisi.

3. Foreign key gak ada

Masukin pesanan dengan pelanggan_id = 99 padahal pelanggan 99 gak ada? Error foreign key violation.

Urutannya penting: insert pelanggan dulu, baru pesanannya.

4. Format tanggal salah

Pakai format ISO: '2026-02-12'. Format '12/02/2026' bisa kebaca beda tergantung setelan database.

5. Lupa NOT NULL

Kalau kolom email punya constraint NOT NULL dan kamu gak nyebut kolom itu, insert-nya gagal. Cek struktur tabel dulu pakai \d pelanggan di psql.

6. String pakai kutip ganda

Di SQL standar, string pakai kutip tunggal: 'Rina'. Kutip ganda itu buat nama kolom atau tabel. MySQL agak longgar soal ini, PostgreSQL nggak.

FAQ

Apa bedanya INSERT INTO VALUES dan INSERT INTO SELECT?

VALUES buat nilai yang kamu ketik langsung. SELECT buat nyalin dari tabel lain — dan bentuk ini gak pakai kata VALUES sama sekali.

Kenapa INSERT saya error duplicate key?

Nilainya bentrok sama primary key atau kolom UNIQUE yang udah ada. Pakai ON CONFLICT DO UPDATE atau DO NOTHING.

Mana yang lebih cepat, multi-row INSERT atau loop?

Multi-row jauh lebih cepat. Di tes 10.000 baris, selisihnya 38 detik vs 1,2 detik.

Perlu sebut nama kolom di INSERT?

Perlu. Tanpa itu, query kamu bergantung ke urutan kolom di tabel — dan bakal rusak diam-diam waktu skema berubah.

Gimana cara batalin INSERT yang salah?

Kalau jalan di dalam transaksi, ketik ROLLBACK. Kalau udah COMMIT, satu-satunya cara ya DELETE manual.

Yang perlu kamu bawa pulang

Sebut nama kolom eksplisit. Gabung baris jadi multi-row kalau datanya banyak. Bungkus pakai BEGIN kalau nyentuh produksi.

Tiga kebiasaan itu yang bedain INSERT yang aman dan INSERT yang bikin kamu begadang.

Copy blok SQL di artikel ini ke database latihanmu, jalanin nomor 1 sampai 4 berurutan, lalu coba sengaja bikin duplicate key error di nomor 7. Ngeliat error-nya sekali bikin kamu inget selamanya.

Lanjut: UPDATE SQL buat ngubah data yang udah masuk, atau referensi perintah INSERT buat sintaks per database.

Coba Langsung

Mau praktek langsung? Mulai latihan SQL gratis

Latihan interaktif, langsung di browser.

Buka NgulikSQL →
Bagikan:
Bima
Ditulis oleh

Bima

Founder & Data Professional

Founder Ngulik Data. Passionate about making data analysis accessible for everyone.

Artikel Terkait

7 SQL Client Gratis Terbaik buat Analis Data (2026)
Tutorial SQL
10 Juli 2026•9 menit baca

7 SQL Client Gratis Terbaik buat Analis Data (2026)

Nggak perlu bayar buat nulis query. Ini 7 SQL client gratis yang beneran dipakai analis, plus kelebihan dan kekurangannya masing-masing.

BimaBima
SQL Style Guide: Cara Nulis Query yang Enak Dibaca Tim
Tutorial SQL
7 Juli 2026•9 menit baca

SQL Style Guide: Cara Nulis Query yang Enak Dibaca Tim

Sepuluh aturan SQL style guide yang bikin query kamu kebaca sama tim — dan sama kamu sendiri 6 bulan lagi. Lengkap dengan contoh sebelum-sesudah.

BimaBima
Take-Home Test SQL Data Analyst: Contoh Soal + Cara Ngerjainnya
Tutorial SQL
4 Juli 2026•11 menit baca

Take-Home Test SQL Data Analyst: Contoh Soal + Cara Ngerjainnya

Contoh soal take-home test SQL yang beneran dipakai perusahaan, dikerjain step by step — dari baca soal, nulis query, sampai nyusun insight yang bikin recruiter nengok.

BimaBima
Kembali ke Blog
Ngulik Data logoNgulik Data

Platform edukasi data lengkap untuk professionals Indonesia. Belajar SQL, Data Analysis, dan lebih banyak lagi dengan praktek langsung dan feedback real-time.

Copyright © 2026 - All rights reserved

LINKS
SupportPricingDatasetBlogAffiliates
LEGAL
Terms of servicesPrivacy policy
Ngulik Data
DatasetLeaderboardBlogStore