Nilai DEFAULT dan Kolom yang Dihasilkan
Sediakan DEFAULT (NOW(), uuid_generate_v4(), 'pending') dan hitung nilai secara langsung dengan kolom GENERATED ALWAYS AS.
Nilai DEFAULT dan Kolom yang Dihasilkan adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar SQL Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Academy mencakup 4 pelajaran total.
DEFAULT: Mengisi Otomatis Nilai yang Hilang
Ketika INSERT mengabaikan sebuah kolom, DEFAULT akan digunakan:
CREATE TABLE users (
id BIGSERIAL PRIMARY KEY,
email VARCHAR(255) NOT NULL,
status TEXT NOT NULL DEFAULT 'active',
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);DEFAULT yang Umum
Pola yang akan Anda gunakan di mana-mana:
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
id UUID PRIMARY KEY DEFAULT gen_random_uuid()
is_active BOOLEAN NOT NULL DEFAULT true
status TEXT NOT NULL DEFAULT 'pending'Menambahkan DEFAULT Belakangan
Baris yang sudah ada tidak diisi ulang secara otomatis — hanya penyisipan baru yang menggunakan nilai bawaan:
ALTER TABLE users ALTER COLUMN status SET DEFAULT 'active';
-- For existing rows, backfill manually:
UPDATE users SET status = 'active' WHERE status IS NULL;Menambahkan NOT NULL dengan DEFAULT
PostgreSQL 11+ mendukung penambahan cepat kolom NOT NULL dengan DEFAULT konstan — tabel tidak perlu ditulis ulang:
ALTER TABLE users
ADD COLUMN signup_source TEXT NOT NULL DEFAULT 'web';
-- Fast in PG 11+, slow beforeKolom Terhitung yang Dibuat Otomatis (STORED)
Kolom yang nilainya dihitung secara otomatis dari kolom lain:
CREATE TABLE orders (
id BIGSERIAL PRIMARY KEY,
qty INT NOT NULL,
unit_price NUMERIC(10,2) NOT NULL,
total NUMERIC(12,2) GENERATED ALWAYS AS (qty * unit_price) STORED
);
INSERT INTO orders (qty, unit_price) VALUES (3, 9.99);
SELECT * FROM orders; -- total is auto-filledtsvector yang Dibuat untuk Pencarian Teks Lengkap
Salah satu penggunaan yang sangat baik untuk kolom yang dibuat otomatis STORED:
ALTER TABLE articles
ADD COLUMN search_doc tsvector
GENERATED ALWAYS AS (to_tsvector('english', title || ' ' || body)) STORED;
CREATE INDEX articles_search_idx ON articles USING GIN(search_doc);Kolom yang Dibuat Otomatis secara Virtual
PostgreSQL saat ini hanya mendukung STORED (virtual akan hadir dalam versi mendatang). Basis data lain (MySQL) mendukung kolom VIRTUAL yang dihitung saat SELECT:
Anda Tidak Dapat INSERT ke Kolom yang Dibuat Otomatis
Mencoba menulis ke salah satunya merupakan kesalahan — nilainya dihitung, bukan disimpan oleh Anda:
INSERT INTO orders (qty, unit_price, total) VALUES (3, 9.99, 30);
-- ERROR: column "total" can only be updated to DEFAULTDEFAULT Berbasis Urutan
SERIAL/BIGSERIAL adalah singkatan dari "nilai DEFAULT dari sebuah urutan":
-- Roughly equivalent:
CREATE TABLE t (id BIGSERIAL PRIMARY KEY);
-- =>
CREATE SEQUENCE t_id_seq;
CREATE TABLE t (id BIGINT PRIMARY KEY DEFAULT nextval('t_id_seq'));
ALTER SEQUENCE t_id_seq OWNED BY t.id;Kolom IDENTITY
Cara standar SQL untuk mendefinisikan IDENTITY:
CREATE TABLE t (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
name TEXT
);
-- GENERATED BY DEFAULT AS IDENTITY allows explicit overrides.DEFAULT dan Logika Bisnis
Buat DEFAULT tetap sederhana. Logika yang kompleks sebaiknya berada dalam kode aplikasi atau pemicu BEFORE INSERT.
Ringkasan
DEFAULT mengisi nilai yang kosong; GENERATED menghitung nilai dari kolom lain.
- NOW(), gen_random_uuid(), literal konstan
- Kolom STORED hasil perhitungan sangat cocok untuk data turunan
- Kolom IDENTITY adalah pola PK modern
Pemeriksaan Cepat
Klausa apa yang membuat kolom terisi otomatis dengan waktu saat ini pada INSERT jika tidak ada nilai yang diberikan?
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Nilai DEFAULT dan Kolom yang Dihasilkan” gratis?
Ya — teks lengkap “Nilai DEFAULT dan Kolom yang Dihasilkan” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Academy, upgrade ke CoddyKit PRO. Kursus SQL Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Nilai DEFAULT dan Kolom yang Dihasilkan”?
Sediakan DEFAULT (NOW(), uuid_generate_v4(), 'pending') dan hitung nilai secara langsung dengan kolom GENERATED ALWAYS AS. Kamu berlatih SQL Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai SQL Academy?
Tidak diperlukan pengalaman sebelumnya. SQL Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Nilai DEFAULT dan Kolom yang Dihasilkan” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran SQL Academy ini?
Ya. Setiap pelajaran SQL Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Kendala NOT NULL dan CHECK
- Kendala UNIQUE dan Kunci Gabungan
- FOREIGN KEY dan Tindakan Referensial
- Nilai DEFAULT dan Kolom yang Dihasilkan