Tabel yang baru dibuat masih kosong. Perintah INSERT INTO menambah baris baru ke dalamnya. Bayangin mengisi formulir pendaftaran dari pelajaran sebelumnya: kamu menulis isian mana yang kamu isi (daftar kolom), lalu isinya dengan urutan yang sama (nilai), dan petugas memberi nomor pendaftarannya sendiri (id). Tiap formulir yang masuk jadi satu baris di tabel.
🧪 Tebakan cepat:
INSERT INTO students (name, grade, city) VALUES (90, 'Dewi', 'Jakarta');. Nama dan nilainya ketuker. SQLite menolak, atau menerima? Tebak dulu, jawabannya ada di bagian "Urutan nilai harus sama dengan urutan kolom".
Bentuk INSERT INTO
Tabelnya students dari pelajaran Membuat Tabel, masih kosong:
INSERT INTO students (name, grade, city) VALUES ('Dewi', 90, 'Jakarta');
INSERT INTO studentsartinya "tambahkan ke tabelstudents".(name, grade, city)adalah daftar kolom yang kamu isi.VALUES ('Dewi', 90, 'Jakarta')adalah nilainya, dengan urutan yang sama:'Dewi'masuk kename,90kegrade,'Jakarta'kecity.- Teks dibungkus kutip tunggal (
'Dewi'). Angka ditulis apa adanya, tanpa kutip dan tanpa titik ribuan. idgak disebut. Kolom ituINTEGER PRIMARY KEY AUTOINCREMENT, jadi database yang mengisinya.
Isi tabelnya sekarang:
| id | name | grade | city |
|---|---|---|---|
| 1 | Dewi | 90 | Jakarta |
Jalankan perintah yang sama sekali lagi, dan Dewi kedua masuk dengan id 2. INSERT selalu menambah, gak pernah menimpa.
Banyak baris sekaligus
Satu INSERT bisa membawa banyak baris. Tiap baris dalam kurungnya sendiri, dipisah koma, dan titik koma cuma satu di akhir:
INSERT INTO students (name, grade, city) VALUES
('Dewi', 90, 'Jakarta'),
('Rizky', 85, 'Bandung'),
('Maya', 92, 'Surabaya');
Di tabel yang masih kosong, hasilnya 3 baris:
| id | name | grade | city |
|---|---|---|---|
| 1 | Dewi | 90 | Jakarta |
| 2 | Rizky | 85 | Bandung |
| 3 | Maya | 92 | Surabaya |
Satu perintah itu semua atau gak sama sekali. Kalau satu nilai saja salah, misalnya Surabaya lupa dikutip, SQLite menjawab no such column: Surabaya dan gak ada satu baris pun yang masuk.
Urutan nilai harus sama dengan urutan kolom
Nilai dipasangkan ke kolom berdasarkan urutannya, bukan maknanya. Perintah di tebakan tadi diterima SQLite tanpa protes:
| id | name | grade | city |
|---|---|---|---|
| 1 | 90 | Dewi | Jakarta |
name berisi 90 dan grade berisi Dewi. Database gak tahu maksudmu, jadi datanya yang rusak. Itu jawaban tebakannya. MySQL (dengan pengaturan bawaannya) dan PostgreSQL menolak teks 'Dewi' di kolom angka, tapi SQLite longgar soal tipe. Jadi cocokkan urutannya sendiri.
Tanpa daftar kolom
Daftar kolom boleh dihilangkan, tapi nilainya harus untuk semua kolom, sesuai urutan di tabel, termasuk id:
INSERT INTO students VALUES ('Dewi', 90, 'Jakarta');
Error: table students has 4 columns but 3 values were supplied
Versi yang diterima memberi NULL untuk id, supaya database tetap mengisinya: INSERT INTO students VALUES (NULL, 'Dewi', 90, 'Jakarta');. Lebih aman selalu menulis daftar kolomnya.
Satu lagi yang sering salah: VALUES (name = 'Dewi', grade = 90). VALUES gak memakai tanda sama dengan. SQLite membacanya sebagai perbandingan dan menjawab no such column: name. Nama kolom ditulis di daftar kolom, nilainya di VALUES.
⚠️ Jebakan yang sering ketemu
- Teks tanpa kutip.
VALUES (Dewi, 90, Jakarta)dijawabno such column: Dewi: SQLite mengiraDewinama kolom. - Kutip ganda untuk teks.
"Dewi"kebetulan diterima SQLite, tapi di SQL standar kutip ganda untuk nama kolom dan tabel, dan PostgreSQL menjawabcolumn "Dewi" does not exist. Biasakan kutip tunggal. - Apostrof di dalam teks.
'Jum'at'dijawabnear "at": syntax error. Gandakan apostrofnya:'Jum''at'. - Jumlah nilai beda dengan jumlah kolom.
(name, grade, city) VALUES ('Dewi', 90)dijawab2 values for 3 columns.
TL;DR: INSERT INTO tabel (kolom1, kolom2) VALUES (nilai1, nilai2); menambah baris. Nilai dipasangkan ke kolom berdasarkan urutan, jadi urutannya harus sama. Teks pakai kutip tunggal, angka tanpa kutip. Banyak baris sekaligus: VALUES (...), (...), (...);, dan satu perintah itu semua atau gak sama sekali. Kolom id yang AUTOINCREMENT gak perlu diisi. Tanpa daftar kolom, semua kolom wajib diberi nilai; dan VALUES gak memakai tanda sama dengan.