FOREIGN KEY dan Tindakan Rujukan
Hubungkan jadual dengan FOREIGN KEY dan pilih ON DELETE CASCADE / SET NULL / RESTRICT untuk tingkah laku yang tepat.
FOREIGN KEY dan Tindakan Rujukan ialah pelajaran SQL Academy percuma di CoddyKit. Ini ialah pelajaran 3 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.
Fungsi Kunci Asing
FOREIGN KEY menyebabkan pangkalan data menolak baris yang menunjuk kepada induk yang tidak wujud:
CREATE TABLE orders (
id BIGSERIAL PRIMARY KEY,
user_id BIGINT NOT NULL REFERENCES users(id),
total NUMERIC(10,2) NOT NULL
);
-- Inserting an order with user_id=999 fails if no such user exists.Mengapa Menggunakan Kunci Asing?
Kunci asing menguatkuasakan integriti rujukan:
- Tiada baris yatim
- Mengesan pepijat aplikasi semasa penyisipan
- Menjadikan rajah ER tepat
- Membolehkan tingkah laku kaskad automatik
Tindakan Rujukan
Apakah yang patut berlaku apabila baris induk dipadamkan atau dikemas kini? Lima pilihan:
NO ACTION— ralat (lalai, boleh ditangguhkan)RESTRICT— ralat (tidak boleh ditangguhkan)CASCADE— padamkan atau kemas kini anak jugaSET NULL— tetapkan FK anak kepada NULLSET DEFAULT— tetapkan FK anak kepada nilai lalainya
ON DELETE CASCADE
"Apabila pengguna dipadamkan, padamkan pesanan mereka juga":
CREATE TABLE orders (
id BIGSERIAL PRIMARY KEY,
user_id BIGINT NOT NULL
REFERENCES users(id) ON DELETE CASCADE,
total NUMERIC(10,2) NOT NULL
);ON DELETE SET NULL
"Apabila pengurus dibuang, pekerja kekal tetapi tidak lagi mempunyai pengurus":
CREATE TABLE employees (
id BIGSERIAL PRIMARY KEY,
full_name TEXT NOT NULL,
manager_id BIGINT REFERENCES employees(id) ON DELETE SET NULL
);Lalai: Seperti RESTRICT
Tanpa tindakan rujukan, cubaan memadam induk yang mempunyai anak akan gagal:
ERROR: update or delete on table "users" violates foreign key constraint "orders_user_id_fkey" on table "orders"
DETAIL: Key (id)=(42) is still referenced from table "orders".Sentiasa Indekskan Lajur FK
PostgreSQL TIDAK mencipta indeks pada pihak anak secara automatik. Tambah satu — tanpanya, pemadaman induk mencetuskan imbasan penuh pada setiap jadual anak:
CREATE INDEX orders_user_id_idx ON orders(user_id);Kunci Asing Komposit
Rujuk kunci primer komposit:
CREATE TABLE order_items (
order_id BIGINT,
line_no INT,
PRIMARY KEY (order_id, line_no)
);
CREATE TABLE shipments (
order_id BIGINT,
line_no INT,
FOREIGN KEY (order_id, line_no)
REFERENCES order_items(order_id, line_no)
);Menangguhkan Pemeriksaan Kunci Asing
Kadangkala anda perlu menyisipkan pasangan yang saling bergantung. Tandakan FK sebagai DEFERRABLE INITIALLY DEFERRED:
ALTER TABLE orders
ALTER CONSTRAINT orders_user_id_fkey DEFERRABLE INITIALLY DEFERRED;
BEGIN;
INSERT INTO orders ... ; -- FK temporarily not checked
INSERT INTO users ... ;
COMMIT; -- checked hereMenambah Kunci Asing Dalam Talian
Pada jadual besar, gunakan NOT VALID + VALIDATE untuk mengelakkan penguncian yang lama:
ALTER TABLE orders
ADD CONSTRAINT orders_user_id_fkey
FOREIGN KEY (user_id) REFERENCES users(id) NOT VALID;
ALTER TABLE orders VALIDATE CONSTRAINT orders_user_id_fkey;Gunakan Kaskad dengan Berhati-hati
Pemadaman CASCADE merebak. Memadam pengguna boleh menghapuskan pesanan, pembayaran dan rekod audit. Pastikan kaskad sepadan dengan niat perniagaan anda.
Ringkasan
Kunci asing ialah pagar pengaman.
- REFERENCES + tindakan mengisytiharkan pautan dan tingkah laku
- Indekskan lajur FK pada pihak anak
- Gunakan NOT VALID + VALIDATE untuk penambahan dalam talian
Semakan Pantas
Apakah tindakan rujukan yang betul untuk AUTOMATICALLY membuang pesanan apabila pengguna induknya dipadamkan?
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 “FOREIGN KEY dan Tindakan Rujukan” percuma?
Ya — teks penuh “FOREIGN KEY dan Tindakan Rujukan” 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 “FOREIGN KEY dan Tindakan Rujukan”?
Hubungkan jadual dengan FOREIGN KEY dan pilih ON DELETE CASCADE / SET NULL / RESTRICT untuk tingkah laku yang tepat. 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 3 daripada 4.
Berapa lamakah pelajaran “FOREIGN KEY dan Tindakan Rujukan” 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
- Kekangan NOT NULL dan CHECK
- Kekangan UNIQUE dan Kunci Komposit
- FOREIGN KEY dan Tindakan Rujukan
- Nilai DEFAULT dan Lajur Terjana