Struktur tabel baru masih berupa kerangka kosong; data baru masuk lewat perintah INSERT. Perintah ini adalah salah satu dari empat operasi dasar manipulasi data (bersama SELECT, UPDATE, dan DELETE) dan hampir pasti muncul di setiap aplikasi yang kita bangun. Pada chapter ini kita mengisi tabel produk langkah demi langkah: satu baris lebih dulu, lalu beberapa baris sekaligus, sampai melihat data yang tersimpan.

Menyiapkan Tabel Latihan #

Contoh-contoh di chapter ini memakai satu tabel sederhana bernama produk dengan empat kolom. Definisi berikut membuat tabel tersebut di database latihan kita:

sql buat-tabel.sql
CREATE TABLE produk (
    id      integer PRIMARY KEY,
    nama    text NOT NULL,
    kategori text NOT NULL,
    harga   numeric(10, 2) NOT NULL
);

Output yang Dihasilkan:

text
CREATE TABLE

Tiga hal penting dari definisi tersebut: kolom id menjadi PRIMARY KEY sehingga nilainya wajib unik dan tidak boleh NULL; nama, kategori, dan harga wajib diisi (NOT NULL); dan harga memakai numeric(10, 2) — bilangan desimal dengan total sepuluh digit dan dua digit di belakang koma, tipe yang tepat untuk uang karena bebas galat pembulatan. Pembahasan tipe data selengkapnya ada di Section Tipe Data.

Mengisi Satu Baris #

Bentuk paling dasar INSERT menyisipkan tepat satu baris: sebutkan tabel dan kolom tujuan setelah INSERT INTO, lalu berikan nilainya lewat VALUES dengan urutan yang sama.

INSERT INTO produk (id, nama, kategori, harga)
VALUES (1, 'Buku Tulis', 'alat tulis', 4500);

Output yang Dihasilkan:

text
INSERT 0 1

Mari kita bedah perintah di atas:

  1. INSERT INTO produk (id, nama, kategori, harga): menunjuk tabel produk dan empat kolom yang akan diisi. Urutan nama kolom di sini yang menentukan urutan nilai, bukan urutan kolom saat CREATE TABLE.
  2. VALUES (1, 'Buku Tulis', 'alat tulis', 4500): satu tanda kurung berisi empat nilai — angka ditulis apa adanya, teks dibungkus kutip satu. Nilai pertama (1) masuk ke kolom id karena id disebut pertama; begitu seterusnya.

Outputnya berupa tag INSERT 0 1. Angka pertama adalah OID (selalu 0 pada tabel biasa zaman sekarang), dan angka 1 adalah jumlah baris yang berhasil disisipkan — angka ini jauh lebih penting: tag INSERT 0 3 berarti tiga baris masuk.

Mengisi Banyak Baris Sekaligus #

Ketika data datang dalam jumlah banyak — hasil impor, data awal aplikasi, isi form multi-entry — mengisinya satu per satu itu lambat dan bertele-tele. VALUES menerima beberapa baris nilai sekaligus, dipisah koma:

INSERT INTO produk (id, nama, kategori, harga)
VALUES
    (2, 'Pulpen Hitam', 'alat tulis', 3000),
    (3, 'Kertas HVS A4', 'kertas', 55000),
    (4, 'Stapler Besar', 'alat tulis', 24000);

SELECT id, nama, kategori, harga
FROM produk
ORDER BY id;

Output yang Dihasilkan:

text
INSERT 0 3
 id |     nama      |  kategori  |  harga   
----+---------------+------------+----------
  1 | Buku Tulis    | alat tulis |  4500.00
  2 | Pulpen Hitam  | alat tulis |  3000.00
  3 | Kertas HVS A4 | kertas     | 55000.00
  4 | Stapler Besar | alat tulis | 24000.00
(4 rows)

Tiga hal yang perlu dicermati dari pola ini:

  1. Tiap baris nilai tetap dibungkus kurung sendiri — (2, 'Pulpen Hitam', ...), (3, 'Kertas HVS A4', ...), dst. — dan dipisahkan koma; baris terakhir tidak diakhiri koma.
  2. Satu INSERT dengan banyak baris bersifat atomik: kalau baris keempat gagal (misalnya id bentrok), seluruh perintah gagal dan tidak ada baris yang tersimpan setengah jalan.
  3. SELECT ... ORDER BY id di akhir file memverifikasi isi tabel — output memperlihatkan keempat produk, termasuk Buku Tulis dari langkah sebelumnya, karena seluruh file dalam satu chapter berjalan pada database yang sama.

Bentuk-Bentuk Lain yang Akan Kita Temui #

INSERT punya beberapa variasi yang dibahas di chapter-chapter selanjutnya, dan baiknya kita kenali wujudnya sejak sekarang:

BentukKegunaanChapter lanjutan
INSERT ... DEFAULT VALUESIsi semua kolom dengan nilai bawaannyaDefault Value
INSERT ... SELECT ...Salin data dari tabel lainInsert Multiple Rows
INSERT ... ON CONFLICT ...Tangani bentrok primary key (upsert)ON CONFLICT
INSERT ... RETURNING ...Langsung lihat baris yang baru masukRETURNING Clause

Satu kebiasaan yang layak dijaga sejak sekarang: selalu sebutkan nama kolomnya secara eksplisit seperti contoh-contoh di atas. Menulis INSERT INTO produk VALUES (...) tanpa daftar kolom bisa jalan, tetapi perintah itu diam-diam rusak begitu struktur tabel berubah — misalnya kolom baru ditambahkan di tengah.

Dengan data yang sudah masuk, pertanyaan berikutnya adalah bagaimana cara mengambil dan melihatnya kembali — tugas perintah SELECT yang menjadi fokus chapter berikutnya.

Referensi #

Berkas Sumber

Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.

buat-tabel.sql

Unduh berkas
sql
CREATE TABLE produk (
    id      integer PRIMARY KEY,
    nama    text NOT NULL,
    kategori text NOT NULL,
    harga   numeric(10, 2) NOT NULL
);

insert-banyak-baris.sql

Unduh berkas
sql
INSERT INTO produk (id, nama, kategori, harga)
VALUES
    (2, 'Pulpen Hitam', 'alat tulis', 3000),
    (3, 'Kertas HVS A4', 'kertas', 55000),
    (4, 'Stapler Besar', 'alat tulis', 24000);

SELECT id, nama, kategori, harga
FROM produk
ORDER BY id;

insert-satu-baris.sql

Unduh berkas
sql
INSERT INTO produk (id, nama, kategori, harga)
VALUES (1, 'Buku Tulis', 'alat tulis', 4500);