Rumah > pangkalan data > tutorial mysql > Bolehkah Lajur Utama Asing Menerima Nilai NULL dalam Pangkalan Data?

Bolehkah Lajur Utama Asing Menerima Nilai NULL dalam Pangkalan Data?

Linda Hamilton
Lepaskan: 2025-01-11 06:44:41
asal
700 orang telah melayarinya

Can Foreign Key Columns Accept NULL Values in a Database?

Kekangan kunci asing yang membenarkan nilai nol

Dalam reka bentuk pangkalan data, selalunya perlu menggunakan kunci asing untuk mewujudkan hubungan antara jadual untuk memastikan integriti rujukan. Walau bagaimanapun, dalam beberapa kes mungkin perlu untuk melonggarkan kekangan dengan membenarkan beberapa lajur kunci asing menjadi batal.

Soalan:

Bolehkah lajur jadual dengan kunci asing dalam pangkalan data kosong?

Jawapan:

Ya, lajur kunci asing boleh mengandungi nilai nol. Ini menjadikan pemodelan data lebih fleksibel dan boleh digunakan dalam senario di mana integriti rujukan dikuatkuasakan hanya apabila terdapat hanya data bukan nol dalam lajur kunci asing.

Contoh MySQL:

Pertimbangkan pangkalan data MySQL dengan jadual berikut:

CREATE DATABASE t;
USE t;

CREATE TABLE parent (
  id INT NOT NULL,
  PRIMARY KEY (id)
) ENGINE=INNODB;

CREATE TABLE child (
  id INT NULL,
  parent_id INT NULL,
  FOREIGN KEY (parent_id) REFERENCES parent(id)
) ENGINE=INNODB;
Salin selepas log masuk

Dalam contoh ini, lajur parent_id dalam jadual anak ditakrifkan sebagai nullable. Ini bermakna jadual anak boleh mempunyai baris dengan nilai NULL dalam lajur parent_id.

Kuatkuasakan kekangan hanya jika nilainya tidak kosong:

Untuk menguatkuasakan integriti rujukan hanya apabila nilai kunci asing bukan batal, takrifkan kekangan kunci asing menggunakan klausa ON DELETE SET NULL atau ON UPDATE SET NULL. Sebagai contoh, pernyataan berikut menguatkuasakan kekangan kunci asing hanya jika nilai kunci asing tidak batal:

ALTER TABLE child
ADD FOREIGN KEY (parent_id) REFERENCES parent(id)
ON DELETE SET NULL ON UPDATE SET NULL;
Salin selepas log masuk

Konfigurasi ini membenarkan nilai null ​​disisipkan ke dalam lajur parent_id, tetapi sebarang kemas kini atau pemadaman berikutnya dalam jadual induk akan mengalir ke jadual anak, menyebabkan nilai parent_id yang sepadan dalam jadual anak ditetapkan kepada NULL.

Kesimpulan:

Dengan membenarkan lajur kunci asing menjadi batal dan menggunakan klausa ON DELETE SET NULL atau ON UPDATE SET NULL, pentadbir pangkalan data boleh mewujudkan perhubungan antara jadual sambil menyediakan fleksibiliti dalam pengurusan data. Ini memastikan integriti rujukan sambil membenarkan penggunaan dalam situasi di mana rujukan khusus mungkin tidak tersedia dengan segera atau sengaja dibiarkan kosong.

Atas ialah kandungan terperinci Bolehkah Lajur Utama Asing Menerima Nilai NULL dalam Pangkalan Data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan