Rumah > pangkalan data > tutorial mysql > Bolehkah Lajur Utama Asing Membenarkan Nilai NULL Sambil Mengekalkan Integriti Data?

Bolehkah Lajur Utama Asing Membenarkan Nilai NULL Sambil Mengekalkan Integriti Data?

Linda Hamilton
Lepaskan: 2025-01-11 08:10:41
asal
808 orang telah melayarinya

Can Foreign Key Columns Allow NULL Values While Maintaining Data Integrity?

Bolehkah lajur kunci asing kosong?

Bolehkah lajur jadual yang mengandungi kunci asing ditetapkan kepada NULL? Ini amat penting dalam situasi di mana integriti data mesti dikekalkan tetapi lajur kunci asing mungkin tidak selalu mempunyai nilai.

Jawapan: Penguatkuasaan kekangan bersyarat

Ya, adalah mungkin untuk menguatkuasakan kekangan kunci asing hanya jika nilainya bukan NULL. Ini memastikan integriti data sambil membenarkan nilai nol dalam lajur kunci asing.

Untuk menggambarkan ini, pertimbangkan kod contoh MySQL 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

Kendalian sisip dengan NULL parent_id akan berjaya:

INSERT INTO child (id, parent_id) VALUES (1, NULL);
Salin selepas log masuk

Walau bagaimanapun, memasukkan nilai dalam parent_id yang tidak wujud dalam jadual induk akan menyebabkan pelanggaran kekangan kunci asing:

INSERT INTO child (id, parent_id) VALUES (2, 1);

-- ERROR 1452 (23000): Cannot add or update a child row: a foreign key 
-- constraint fails (`t/child`, CONSTRAINT `child_ibfk_1` FOREIGN KEY
-- (`parent_id`) REFERENCES `parent` (`id`))
Salin selepas log masuk

Ini menunjukkan bahawa kekangan kunci asing hanya dikuatkuasakan jika lajur parent_id mengandungi rujukan yang sah, dengan berkesan membenarkan nilai nol untuk mengelakkan kekangan.

Atas ialah kandungan terperinci Bolehkah Lajur Utama Asing Membenarkan Nilai NULL Sambil Mengekalkan Integriti 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