0Pricing
SQL Academy · Lekcja

Wartości DEFAULT i kolumny generowane

Podawaj wartości DEFAULT (NOW(), uuid_generate_v4(), 'pending') i obliczaj wartości na bieżąco za pomocą kolumn GENERATED ALWAYS AS.

Wartości DEFAULT i kolumny generowane to bezpłatna lekcja SQL Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej SQL Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Academy zawiera 4 lekcji w sumie.

DEFAULT: automatyczne uzupełnianie brakujących wartości

Gdy INSERT pomija kolumnę, używana jest wartość DEFAULT:

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()
);

Typowe wartości DEFAULT

Wzorce używane praktycznie wszędzie:

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'

Dodawanie DEFAULT później

Istniejące wiersze nie są domyślnie uzupełniane — wartość domyślna jest używana tylko przy nowych operacjach wstawiania:

ALTER TABLE users ALTER COLUMN status SET DEFAULT 'active';

-- For existing rows, backfill manually:
UPDATE users SET status = 'active' WHERE status IS NULL;

Dodawanie NOT NULL z DEFAULT

PostgreSQL 11+ obsługuje szybkie dodawanie kolumn NOT NULL ze stałą wartością DEFAULT — tabela nie jest przepisywana:

ALTER TABLE users
  ADD COLUMN signup_source TEXT NOT NULL DEFAULT 'web';
-- Fast in PG 11+, slow before

Obliczane kolumny generowane (STORED)

Kolumna, której wartość jest automatycznie obliczana na podstawie innych kolumn:

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-filled

Generowany tsvector do wyszukiwania pełnotekstowego

Świetne zastosowanie kolumn generowanych 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);

Wirtualne kolumny generowane

PostgreSQL obsługuje obecnie tylko STORED (kolumny wirtualne pojawią się w przyszłych wersjach). Inne bazy danych, takie jak MySQL, obsługują kolumny VIRTUAL obliczane podczas SELECT.

Nie można wykonywać INSERT do kolumn generowanych

Próba zapisania do niej wartości jest błędem — wartości te są obliczane, a nie zapisywane ręcznie:

INSERT INTO orders (qty, unit_price, total) VALUES (3, 9.99, 30);
-- ERROR: column "total" can only be updated to DEFAULT

Wartości domyślne oparte na sekwencji

SERIAL/BIGSERIAL to skrót oznaczający „wartość domyślną pobieraną z sekwencji”:

-- 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;

Kolumny IDENTITY

Standardowy sposób SQL definiowania kolumny tożsamości:

CREATE TABLE t (
  id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  name TEXT
);

-- GENERATED BY DEFAULT AS IDENTITY allows explicit overrides.

DEFAULT a logika biznesowa

Wartości domyślne powinny być proste. Złożona logika należy do kodu aplikacji lub wyzwalacza BEFORE INSERT.

Podsumowanie

DEFAULT uzupełnia brakujące wartości, a GENERATED oblicza wartość na podstawie innych kolumn.

  • NOW(), gen_random_uuid(), stałe literały
  • Obliczane kolumny STORED świetnie nadają się do danych pochodnych
  • Kolumny tożsamości są obecnie standardowym wzorcem dla kluczy głównych

Szybkie sprawdzenie

Jaka klauzula sprawia, że podczas INSERT kolumna zostanie automatycznie wypełniona bieżącym czasem, jeśli nie podano wartości?

Często zadawane pytania

Czy lekcja „Wartości DEFAULT i kolumny generowane” jest bezpłatna?

Tak — pełny tekst „Wartości DEFAULT i kolumny generowane” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu SQL Academy, przejdź na CoddyKit PRO. Kurs SQL Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Wartości DEFAULT i kolumny generowane”?

Podawaj wartości DEFAULT (NOW(), uuid_generate_v4(), 'pending') i obliczaj wartości na bieżąco za pomocą kolumn GENERATED ALWAYS AS. Ćwiczysz SQL Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć SQL Academy?

Nie wymagamy żadnego doświadczenia. SQL Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Wartości DEFAULT i kolumny generowane”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji SQL Academy?

Tak. Każda lekcja SQL Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Ograniczenia NOT NULL i CHECK
  2. Ograniczenia UNIQUE i klucze złożone
  3. FOREIGN KEY i akcje referencyjne
  4. Wartości DEFAULT i kolumny generowane
← Powrót do SQL Academy