Rumah >pangkalan data >tutorial mysql >Bolehkah Kunci Asing MySQL Membenarkan Nilai NULL?
Menguatkuasakan integriti data adalah penting apabila mereka bentuk jadual pangkalan data. Rujukan kepada lajur jadual lain melalui kunci asing memainkan peranan penting dalam mengekalkan sambungan ini. Soalan biasa ialah: Adakah lajur jadual dengan kunci asing membenarkan nilai NULL?
Dalam MySQL menggunakan jenis jadual InnoDB, jawapannya adalah ya. Anda boleh mengisytiharkan lajur kunci asing sebagai batal. Tingkah laku ini membolehkan anda memasukkan baris baharu dengan nilai NULL dalam lajur kunci asing, tetapi menguatkuasakan kekangan apabila memasukkan nilai bukan NULL.
Untuk menggambarkan ini, pertimbangkan contoh berikut:
<code class="language-sql">CREATE TABLE parent (id INT NOT NULL, PRIMARY KEY (id)); CREATE TABLE child ( id INT NULL, parent_id INT NULL, FOREIGN KEY (parent_id) REFERENCES parent(id) );</code>
Sekarang, mari masukkan baris ke dalam jadual "anak" dengan "id_ibu bapa" ialah NULL:
<code class="language-sql">INSERT INTO child (id, parent_id) VALUES (1, NULL); -- 查询成功,影响 1 行 (0.01 秒)</code>
Operasi sisipan ini berjaya kerana kami menetapkan nilai NULL untuk lajur "parent_id". Walau bagaimanapun, cubaan memasukkan nilai bukan NULL yang tidak wujud dalam jadual "induk" akan mengakibatkan ralat kerana kekangan kunci asing dikuatkuasakan:
<code class="language-sql">INSERT INTO child (id, parent_id) VALUES (2, 1); -- 错误 1452 (23000):无法添加或更新子行:外键约束失败 (`t/child`, CONSTRAINT `child_ibfk_1` FOREIGN KEY (`parent_id`) REFERENCES `parent` (`id`))</code>
Tingkah laku ini memberikan fleksibiliti dan kawalan ke atas integriti data. Anda boleh membenarkan nilai NULL sementara semasa populasi data sambil masih menguatkuasakan kekangan kunci asing kemudian. Dengan mengurus kekangan NULL dengan teliti pada lajur kunci asing, anda boleh memastikan ketepatan dan ketekalan data anda.
Atas ialah kandungan terperinci Bolehkah Kunci Asing MySQL Membenarkan Nilai NULL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!