0Pricing
SQL Academy · Pelajaran

Kendala UNIQUE dan Kunci Gabungan

Tegakkan keunikan pada satu atau beberapa kolom, pahami NULL dalam indeks unik, dan gunakan keunikan gabungan untuk kunci alami.

Kendala UNIQUE dan Kunci Gabungan adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 2 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.

UNIQUE: Duplikat Tidak Diizinkan

Kendala UNIQUE melarang dua baris memiliki nilai yang sama pada kolom yang dikenai kendala:

CREATE TABLE users (
  id BIGSERIAL PRIMARY KEY,
  email VARCHAR(255) NOT NULL UNIQUE,
  username VARCHAR(50) UNIQUE
);

UNIQUE Membuat Indeks

Kendala UNIQUE diimplementasikan dengan indeks B-tree unik, sehingga pencarian berdasarkan kolom tersebut berlangsung cepat.

-- This shows the implicit index:
SELECT indexname FROM pg_indexes WHERE tablename = 'users';

UNIQUE Gabungan

Keunikan berdasarkan gabungan beberapa kolom:

CREATE TABLE memberships (
  user_id BIGINT NOT NULL,
  group_id BIGINT NOT NULL,
  role TEXT NOT NULL,
  UNIQUE (user_id, group_id)        -- a user can be in a group at most once
);

UNIQUE vs PRIMARY KEY

Kunci utama pada dasarnya adalah UNIQUE + NOT NULL + identitas yang ditetapkan. Sebuah tabel dapat memiliki ONE PRIMARY KEY, tetapi banyak kendala UNIQUE.

NULL dalam UNIQUE

SQL Standar memperlakukan NULL sebagai nilai yang berbeda dari setiap nilai lain, termasuk NULL lainnya. Anda dapat memiliki beberapa baris NULL dalam kolom UNIQUE:

CREATE TABLE invites (email VARCHAR(255) UNIQUE);
INSERT INTO invites VALUES (NULL), (NULL);   -- both succeed

-- PostgreSQL 15+ offers UNIQUE NULLS NOT DISTINCT to treat NULL as equal:
CREATE TABLE invites2 (email VARCHAR(255) UNIQUE NULLS NOT DISTINCT);

PRIMARY KEY Gabungan

Jika kunci gabungan alami sesuai, gunakan kunci tersebut sebagai PRIMARY KEY:

CREATE TABLE order_items (
  order_id   BIGINT NOT NULL REFERENCES orders(id) ON DELETE CASCADE,
  product_id BIGINT NOT NULL REFERENCES products(id),
  quantity   INT NOT NULL CHECK (quantity > 0),
  PRIMARY KEY (order_id, product_id)
);

Kunci Pengganti + UNIQUE Alami

Pola umum: id sintetis sebagai kunci utama, sedangkan keunikan di dunia nyata diterapkan melalui UNIQUE:

CREATE TABLE products (
  id BIGSERIAL PRIMARY KEY,
  sku VARCHAR(50) NOT NULL UNIQUE,
  name TEXT NOT NULL
);

Indeks UNIQUE Parsial

Keunikan hanya berlaku di antara sebagian baris:

-- One active email per user (deleted users can re-register):
CREATE UNIQUE INDEX users_active_email_idx
  ON users (email)
  WHERE deleted_at IS NULL;

Indeks UNIQUE Berbasis Ekspresi

Keunikan berdasarkan ekspresi yang dihitung — berguna untuk email yang tidak peka terhadap huruf besar-kecil:

CREATE UNIQUE INDEX users_email_ci_idx ON users (LOWER(email));

Kesalahan Pelanggaran UNIQUE

Penyisipan duplikat menghasilkan:

ERROR:  duplicate key value violates unique constraint "users_email_key"
DETAIL:  Key (email)=(alice@example.com) already exists.

UPSERT Dibangun di Atas UNIQUE

ON CONFLICT memerlukan UNIQUE atau PRIMARY KEY sebagai target — dengan demikian PostgreSQL mengetahui apa yang dianggap sebagai duplikat.

Ringkasan

UNIQUE adalah kendala terpenting kedua setelah NOT NULL.

  • Tunggal atau gabungan
  • UNIQUE parsial untuk "hanya di antara baris aktif"
  • UNIQUE berbasis ekspresi untuk kunci yang tidak peka terhadap huruf besar-kecil
  • Perhatikan aturan NULL yang dianggap berbeda

Pemeriksaan Singkat

Bisakah kolom UNIQUE berisi beberapa nilai NULL dalam SQL Standar?

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Kendala UNIQUE dan Kunci Gabungan” gratis?

Ya — teks lengkap “Kendala UNIQUE dan Kunci Gabungan” 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 “Kendala UNIQUE dan Kunci Gabungan”?

Tegakkan keunikan pada satu atau beberapa kolom, pahami NULL dalam indeks unik, dan gunakan keunikan gabungan untuk kunci alami. 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 2 dari 4.

Berapa lama pelajaran “Kendala UNIQUE dan Kunci Gabungan” 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

  1. Kendala NOT NULL dan CHECK
  2. Kendala UNIQUE dan Kunci Gabungan
  3. FOREIGN KEY dan Tindakan Referensial
  4. Nilai DEFAULT dan Kolom yang Dihasilkan
← Kembali ke SQL Academy