Memasukkan Data dengan INSERT (dan Kenalan dengan RETURNING)

INSERT satu baris dan banyak baris sekaligus, menyebut kolom, nilai DEFAULT dan NULL, serta RETURNING khas PostgreSQL untuk melihat baris yang baru dibuat.

Part 5 dari 25 ± 30 menit Gratis

Analogi: INSERT itu seperti mengisi formulir pendaftaran. Kolom adalah isian di formulir, baris adalah satu formulir yang sudah terisi. Kalau ada kolom wajib yang kosong, petugas (constraint) menolak formulirmu. RETURNING seperti petugas yang langsung memberikan salinan bukti pendaftaran berisi nomor antreanmu.

Bentuk dasar INSERT

INSERT INTO nama_tabel (kolom1, kolom2, ...)
VALUES (nilai1, nilai2, ...);

Contoh pada tabel kategori (kolom id terisi otomatis, jadi tidak perlu kita sebut):

INSERT INTO kategori (nama) VALUES ('Biografi');

Kebiasaan baik: selalu tulis nama kolom setelah nama tabel. Kalau suatu hari struktur tabel berubah (kolom ditambah), INSERT-mu tetap aman.

Banyak baris sekaligus

Pisahkan setiap baris dengan koma. Jauh lebih cepat daripada INSERT berulang-ulang:

INSERT INTO kategori (nama) VALUES
  ('Agama'),
  ('Sejarah'),
  ('Masakan');

Aturan penulisan nilai

JenisCara menulisContoh
TeksKutip tunggal'Laskar Pelangi'
AngkaTanpa kutip89000, 4.5
TanggalTeks format YYYY-MM-DD'2025-01-31'
BooleanTRUE / FALSETRUE
KosongNULL (tanpa kutip)NULL

Teks yang mengandung tanda kutip (misalnya Ayah's Book) ditulis dengan kutip dua kali: 'Ayah''s Book'.

Kolom yang tidak disebut

Kolom yang tidak ditulis akan memakai nilai DEFAULT-nya, atau NULL bila tidak punya default. Kalau kolom itu NOT NULL tanpa default, INSERT akan error.

Senjata khas PostgreSQL: RETURNING

Setelah INSERT, kamu sering butuh tahu id yang baru dibuat. Di Postgres cukup tambahkan RETURNING:

INSERT INTO kategori (nama) VALUES ('Puisi') RETURNING id, nama;
 id | nama
----+-------
  6 | Puisi
(1 row)

Tanpa perlu SELECT tambahan. RETURNING juga bisa dipakai di UPDATE dan DELETE, dan sangat populer di kode aplikasi.

Bagaimana kalau id sudah dipakai?

Kalau kamu memaksa mengisi id yang sudah ada, Postgres menolak: duplicate key value violates unique constraint. Biarkan SERIAL yang mengisi id.

Kasus nyata: mendaftarkan pelanggan baru dan langsung mendapat ID-nya

Saat pelanggan mendaftar, aplikasi perlu id-nya untuk membuat sesi login. Tanpa RETURNING, aplikasi harus bertanya lagi ke database. Dengan RETURNING, cukup satu langkah:

INSERT INTO pelanggan (nama, kota, email, tgl_daftar)
VALUES ('Dewi Lestari', 'Bandung', 'dewi@email.com', CURRENT_DATE)
RETURNING id, nama;

Untuk memasukkan banyak data sekaligus (misalnya impor katalog), pakai satu INSERT dengan banyak tanda kurung. Itu jauh lebih cepat daripada ratusan INSERT terpisah.

Kesalahan yang sering terjadi

  • Menulis INSERT tanpa daftar kolom. Jika kelak tabel bertambah kolom, query lama rusak. Selalu sebut nama kolomnya.
  • Memakai kutip ganda untuk teks: "Dewi" dibaca sebagai nama kolom. Teks memakai kutip tunggal.
  • Mengisi kolom SERIAL manual sehingga bentrok dengan urutan otomatis. Biarkan database yang mengisinya.

Praktikkan langsung, gratis

Tulis dan jalankan kode langsung di browser, dapatkan penilaian otomatis. Daftar gratis kapan saja untuk menyimpan progres dan meraih sertifikat.

Coba latihan sekarang, tanpa daftar
Bagikan: WhatsApp Facebook LinkedIn X