Rumah >pangkalan data >tutorial mysql >Bolehkah Lajur Utama Asing Membenarkan Nilai NULL Sambil Mengekalkan Integriti Data?
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:
<code class="language-sql">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;</code>
Kendalian sisip dengan NULL parent_id akan berjaya:
<code class="language-sql">INSERT INTO child (id, parent_id) VALUES (1, NULL);</code>
Walau bagaimanapun, memasukkan nilai dalam parent_id yang tidak wujud dalam jadual induk akan menyebabkan pelanggaran kekangan kunci asing:
<code class="language-sql">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`))</code>
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!