Kunci Primer dan Keunikan
Fahami kunci primer, kunci pengganti berbanding kunci semula jadi, kunci komposit dan sebab setiap baris memerlukan pengecam unik yang boleh dipercayai.
Kunci Primer dan Keunikan ialah pelajaran SQL Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran SQL Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus SQL Academy merangkumi sejumlah 4 pelajaran.
Mengapa Setiap Baris Memerlukan ID Unik
Untuk mengemas kini atau memadam baris tertentu dengan selamat, anda mesti boleh menunjuk kepadanya tanpa sebarang kekeliruan.
- Dua pengguna bernama "Alice Adams" boleh wujud
- Tetapi dua pengguna dengan
id = 42mestilah TIDAK wujud - Pengenal unik itu dipanggil kunci utama
Mengisytiharkan Kunci Utama
Anda menandakan lajur sebagai kunci utama apabila mencipta jadual:
CREATE TABLE products (
id BIGSERIAL PRIMARY KEY,
sku VARCHAR(50) NOT NULL,
name VARCHAR(200) NOT NULL,
price NUMERIC(10,2) NOT NULL
);Kunci Utama = NOT NULL + UNIQUE
PRIMARY KEY menguatkuasakan perkara berikut secara automatik:
- NOT NULL — nilai kunci utama tidak boleh tiada
- UNIQUE — tiada dua baris boleh berkongsi nilai kunci utama yang sama
Pangkalan data juga mencipta indeks unik pada kunci utama, jadi carian menggunakan id adalah pantas.
Kunci Pengganti berbanding Kunci Semula Jadi
Anda mempunyai dua pilihan untuk kunci utama:
- Pengganti — ID sintetik yang dijana oleh pangkalan data (BIGSERIAL, UUID). Paling biasa dalam aplikasi moden.
- Semula jadi — pengenal dunia sebenar (e-mel, ISBN). Berisiko kerana orang boleh menukar e-mel.
Amalan terbaik: gunakan ID pengganti dan letakkan kekangan UNIQUE pada kunci semula jadi.
BIGSERIAL: Nombor Bulat Bertambah Secara Automatik
Dalam PostgreSQL, BIGSERIAL mencipta lajur 64-bit yang bertambah secara automatik dan disokong oleh jujukan.
CREATE TABLE orders (
id BIGSERIAL PRIMARY KEY,
user_id BIGINT NOT NULL,
total NUMERIC(10,2) NOT NULL
);
-- You omit id on insert and the DB fills it in:
INSERT INTO orders (user_id, total) VALUES (7, 99.50);Kunci Utama UUID
Alternatifnya ialah UUID 128-bit, yang berguna apabila ID mesti unik merentas sistem atau dijana pada sisi klien.
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE TABLE sessions (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
user_id BIGINT NOT NULL,
ip INET
);Kunci Utama Komposit
Kadangkala pengenal semula jadi ialah gabungan beberapa lajur:
CREATE TABLE order_items (
order_id BIGINT NOT NULL,
product_id BIGINT NOT NULL,
quantity INT NOT NULL,
PRIMARY KEY (order_id, product_id)
);
-- The pair (order_id, product_id) must be unique
-- A product can appear at most once per orderKekangan UNIQUE berbanding Kunci Utama
Anda boleh mengisytiharkan lajur lain sebagai unik tanpa menjadikannya kunci utama:
CREATE TABLE users (
id BIGSERIAL PRIMARY KEY,
email VARCHAR(255) NOT NULL UNIQUE,
username VARCHAR(50) UNIQUE
);
-- INSERT below fails on the second row:
INSERT INTO users (email, username) VALUES ('a@x.com', 'alice');
INSERT INTO users (email, username) VALUES ('a@x.com', 'bob'); -- ERRORPerkara yang Berlaku apabila Sisipan Pendua Dibuat
Jika anda cuba menyisipkan kunci utama yang pendua, pangkalan data menolak keseluruhan pernyataan:
ERROR: duplicate key value violates unique constraint "users_pkey" DETAIL: Key (id)=(42) already exists.
Ini bagus — ia menghalang kerosakan data secara senyap.
Carian Baris melalui Kunci Utama adalah Pantas
Indeks unik pada kunci utama memberikan carian O(log n) walaupun pada skala berbilion baris.
-- Index Scan using users_pkey on users (cost=0.43..8.45 rows=1)
SELECT email FROM users WHERE id = 42;Jangan Gunakan Semula ID
Walaupun anda memadam sesuatu baris, JANGAN gunakan semula kunci utamanya. Jadual lain atau sistem luaran mungkin masih merujuk kepadanya. Biarkan jujukan terus meningkat — ID tidak mahal.
Ulang Kaji
Kunci utama memberikan setiap baris pengenal yang stabil dan unik.
- Utamakan kunci pengganti (BIGSERIAL atau UUID)
- Gunakan UNIQUE untuk kunci semula jadi yang tidak boleh diduplikasi
- Kunci utama komposit memodelkan "pasangan ini mesti unik"
Semakan Pantas
Apakah yang dikuatkuasakan secara tersirat oleh PRIMARY KEY?
Pelajari SQL dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 46
- Pelajaran
- 183
Soalan Lazim
Adakah pelajaran “Kunci Primer dan Keunikan” percuma?
Ya — teks penuh “Kunci Primer dan Keunikan” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus SQL Academy, tingkat taraf kepada CoddyKit PRO. Kursus SQL Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Kunci Primer dan Keunikan”?
Fahami kunci primer, kunci pengganti berbanding kunci semula jadi, kunci komposit dan sebab setiap baris memerlukan pengecam unik yang boleh dipercayai. Anda berlatih SQL Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan SQL Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran SQL Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.
Berapa lamakah pelajaran “Kunci Primer dan Keunikan” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran SQL Academy ini?
Ya. Setiap pelajaran SQL Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Apakah RDBMS dan Mengapa Jadual Penting
- Kunci Primer dan Keunikan
- NULL: Nilai Kebenaran Ketiga
- Gambaran Keseluruhan Jenis Data: INT VARCHAR DATE BOOLEAN