Belajar dengan membaca secara berurutan

INSERT — Menambahkan Data ke Tabel

Pelajari pernyataan SQL INSERT dari dasar. Mencakup bentuk dengan kolom dinamai, bentuk pintas tanpa kolom, dan INSERT banyak baris sekaligus — tiga pola diilustrasikan dengan tabel terpisah dan dijalankan langsung di browser kamu.

INSERT — menambahkan baris ke tabel

Untuk menambahkan baris baru ke tabel, kamu memakai pernyataan INSERT. SELECT tentang "membaca data"; INSERT adalah operasi paling dasar untuk "menyisipkan data." Pendaftaran pengguna, pencatatan pembelian, penulisan log — sebagian besar aktivitas "menyimpan sesuatu" di sebuah aplikasi terjadi melalui INSERT.

Bagian sintaks dari pernyataan INSERT
INSERT INTO tabel(daftar kolom)VALUES (daftar nilai);Tabel targetKolom yang diisi(opsional)Daftar nilai(urutan kolom)
Pernyataan INSERT menggabungkan tiga blok: 'INSERT INTO nama_tabel', '(daftar kolom)', dan 'VALUES (daftar nilai);'. Daftar kolom opsional — kalau dihilangkan, nilainya harus mencakup setiap kolom, dalam urutan saat didefinisikan.

Menamai kolom dan nilai (bentuk dasar)

Bentuk yang paling umum menamai kolom dan nilai sekaligus: INSERT INTO nama_tabel (col, col, ...) VALUES (val, val, ...);. Setelah nama tabel, daftar kolom dalam tanda kurung, dan setelah VALUES, daftar nilainya dengan urutan dan jumlah yang sama.

Dalam bentuk ini, setiap kolom yang tidak ada di daftar default-nya menjadi NULL (atau DEFAULT kolom). Kalau kamu menghilangkan kolom INTEGER PRIMARY KEY, auto-numbering aktif dan integer kosong diberikan.

Struktur INSERT (bentuk dasar)
INSERT INTO(daftar kolom)VALUES (daftar nilai)Nama tabelbookKolom yang diisi(title, price)Daftar nilai('Pengantar SQL', 1980)Tabel targetPilih kolomDaftar nilai
INSERT INTO adalah "tabel mana yang disisipi," daftar kolom dalam tanda kurung adalah "kolom mana yang diberi nilai," dan di dalam VALUES (...) adalah "nilai-nilai, dengan urutan yang sama dengan daftar kolom." Rasakan posisi dan peran masing-masing.
-- Tambah 1 baris ke book (hanya title dan price)
INSERT INTO book (title, price) VALUES ('Pengantar SQL', 1980);

-- Periksa hasilnya
SELECT * FROM book;

Bagaimana dengan kolom yang dihilangkan?

Kolom yang tidak ada di daftar mendapat DEFAULT kolom (atau NULL kalau tidak ada). Untuk kolom INTEGER PRIMARY KEY, auto-numbering aktif dan integer kosong diberikan (setara dengan AUTO_INCREMENT di MySQL).

Bayangkan mendaftarkan buku baru di database buku. (Jalankan dengan benar dan penjelasannya akan muncul.)

① Sisipkan 1 baris ke tabel book.

② Tentukan hanya dua kolom, title dan price. Nilainya title='SQL Praktis' dan price=2480.

③ Akhiri dengan SELECT * FROM book; dan pastikan id dinomori otomatis dan published_on adalah NULL.

SQL Editor

Jalankan query untuk melihat hasil

Menghilangkan daftar kolom untuk mengisi semua kolom

Bentuk lain adalah pintasan tanpa daftar kolom, mendaftar nilai untuk semua kolom secara berurutan: INSERT INTO nama_tabel VALUES (val, val, ...);. Kata kunci VALUES muncul tepat setelah nama tabel.

Kompromi untuk lebih singkatnya: kamu harus ingat urutan kolom tabel. Dan begitu ALTER TABLE menambah kolom kemudian, bentuk ini rusak karena jumlah nilai tidak lagi cocok — jadi pakai hanya untuk situasi terbatas seperti memuat data sementara atau skrip sekali pakai.

Bentuk dengan kolom dinamai vs bentuk tanpa kolom
Hanya kolom yang perlu / aman saat ALTERSemua kolom urut / rusak saat ALTERBentuk kolom dinamai(direkomendasikan)INSERT INTO task (title, done) VALUES ('Bersih-bersih', 0);Bentuk tanpa kolom(pintasan)INSERT INTO task VALUES ('Bersih-bersih', 0);
Bentuk dinamai mengeja hanya kolom yang kamu isi; bentuk tanpa kolom mendaftar setiap kolom secara berurutan. Versi yang lebih pendek rapuh saat kolom ditambahkan kemudian.
-- Tambah 1 baris ke task (menghilangkan daftar kolom)
INSERT INTO task VALUES ('Bersih-bersih', 0);

-- Periksa hasilnya
SELECT * FROM task;

Bentuk tanpa kolom rusak di bawah ALTER TABLE

INSERT INTO task VALUES ('Bersih-bersih', 0); bekerja sekarang karena tabelnya punya 2 kolom. Kalau kamu nanti menjalankan ALTER TABLE task ADD COLUMN due_on TEXT;, setiap kolom butuh nilai (3 nilai), dan INSERT ini rusak dengan error ketidakcocokan jumlah nilai.

Untuk aplikasi produksi dan skrip, lebih baik pakai bentuk kolom dinamai (bentuk dasar) — saat definisi tabel berkembang, kamu tidak perlu menulis ulang INSERT-mu. Simpan bentuk pintasan untuk kasus terbatas seperti "data sementara dengan skema tetap" atau "skrip sekali pakai."

Bayangkan mendaftarkan tugas baru di aplikasi todo.

① INSERT 1 baris ke tabel task dengan daftar kolom dihilangkan.

② Urutan kolom task adalah titledone. Pakai title='Belanja' dan done=0, dengan urutan itu.

③ Akhiri dengan SELECT * FROM task; dan pastikan barisnya terdaftar.

SQL Editor

Jalankan query untuk melihat hasil

Menambah banyak baris sekaligus

Satu pernyataan INSERT bisa menambah banyak baris sekaligus. Cukup daftar beberapa tuple `(val, val, ...)` dipisah koma setelah VALUES — setiap pasang tanda kurung adalah satu baris.

Ada dua alasan untuk melakukan ini. Pertama kode lebih sedikit, dan kedua hanya butuh satu round-trip ke database, yang lebih cepat daripada menjalankan INSERT per baris. Pemuatan massal dari file CSV atau log adalah kasus penggunaan standar untuk bentuk ini.

-- Tambah 3 baris ke product sekaligus
INSERT INTO product (name, price) VALUES
  ('Apel', 150),
  ('Pisang', 100),
  ('Jeruk', 200);

-- Periksa hasilnya
SELECT * FROM product;
INSERT banyak baris — setiap () di VALUES adalah satu baris
idnameprice() di VALUES1(auto)Apel150('Apel', 150)2(auto)Pisang100('Pisang', 100)3(auto)Jeruk200('Jeruk', 200)Baris 1Baris 2Baris 3
Satu () setelah VALUES menambah satu baris; N () dipisah koma menambah N baris. Di dalam setiap (), nilai mengikuti urutan yang sama dengan daftar kolom.

Bayangkan menanam tiga produk awal ke situs e-commerce.

① INSERT 3 baris sekaligus ke tabel product.

② Tentukan dua kolom, name dan price. Tiga barisnya adalah ('Pensil', 80) / ('Penghapus', 120) / ('Buku Tulis', 250).

③ Akhiri dengan SELECT * FROM product; dan pastikan ada 3 baris dengan nilai id yang dinomori otomatis.

SQL Editor

Jalankan query untuk melihat hasil

Saat bentuk tanpa kolom rusak — ketika ALTER TABLE menambah kolom

Callout sebelumnya bilang "bentuk tanpa kolom rusak di bawah ALTER TABLE." Melihatnya rusak sekali memberimu acuan konkret untuk kembali saat kamu memutuskan apakah pakai pintasan di produksi.

Untuk latihan terakhir artikel ini, buat tabel coretan `task_v2`, tambah kolom dengan ALTER TABLE, dan coba INSERT tanpa kolom yang sama sebelum dan sesudah. INSERT yang sebelumnya bekerja gagal dengan error "jumlah nilai tidak cocok" begitu kolom ditambahkan.

Buat tabel coretan task_v2 dan amati INSERT tanpa kolom yang rusak setelah ALTER TABLE.

① Hapus tabel bernama sama yang sudah ada dengan DROP TABLE IF EXISTS task_v2;, lalu buat tabel 2 kolom dengan CREATE TABLE task_v2 (title TEXT, done INTEGER);.

② Jalankan INSERT INTO task_v2 VALUES ('Belanja', 0); — ini berhasil saat tabelnya punya 2 kolom (bentuk tanpa kolom bekerja).

③ Jalankan ALTER TABLE task_v2 ADD COLUMN due_on TEXT; untuk menambah kolom ke-3.

④ Jalankan INSERT INTO task_v2 VALUES ('Membaca', 0); lagi. Kali ini hanya 2 nilai untuk 3 kolom — seharusnya ditolak dengan error.

(Latihan ini benar kalau error muncul.)

SQL Editor

Jalankan query untuk melihat hasil
QUIZ

Cek Pemahaman

Jawab setiap pertanyaan satu per satu.

Soal 1Saat kamu menjalankan INSERT INTO book (title, price) VALUES ('Pengantar SQL', 1980);, apa yang terjadi pada kolom id (INTEGER PRIMARY KEY) yang tidak ada di daftar kolom?

Soal 2Mana dari berikut ini yang menggambarkan bentuk tanpa kolom, INSERT INTO nama_tabel VALUES (...), dengan benar?

Soal 3Mana cara yang benar menulis INSERT banyak baris?