Rumah > pangkalan data > tutorial mysql > Bolehkah Lajur Utama Asing Menerima Nilai NULL dalam InnoDB MySQL?

Bolehkah Lajur Utama Asing Menerima Nilai NULL dalam InnoDB MySQL?

Barbara Streisand
Lepaskan: 2025-01-11 07:33:51
asal
287 orang telah melayarinya

Can Foreign Key Columns Accept NULL Values in MySQL's InnoDB?

Kunci asing dan nilai NULL ​​dalam lajur jadual pangkalan data

Dalam reka bentuk pangkalan data, kekangan kunci asing sering digunakan untuk memastikan integriti data dengan menguatkuasakan perhubungan antara jadual. Walau bagaimanapun, persoalan timbul: adakah lajur jadual dengan kunci asing dibenarkan untuk memegang nilai NULL?

Seperti yang ditunjukkan dalam soalan yang disediakan, mungkin terdapat situasi di mana kekangan kunci asing perlu dikuatkuasakan hanya apabila nilai ditetapkan secara eksplisit. Ini membolehkan rekod dengan nilai NULL pada mulanya dimasukkan dalam lajur kunci asing sambil memastikan integriti data selepas nilai diisi.

Dalam jenis jadual MySQL dan InnoDB, sememangnya mungkin untuk mempunyai kunci asing bukan NULL yang membenarkan nilai NULL. Contoh berikut menunjukkan ini:

<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>
Salin selepas log masuk

Benarkan rekod dengan parent_id menjadi NULL untuk dimasukkan ke dalam jadual child:

<code class="language-sql">INSERT INTO child (id, parent_id) VALUES (1, NULL);</code>
Salin selepas log masuk

Walau bagaimanapun, cubaan memasukkan rekod yang nilai parent_idnya tidak wujud dalam jadual parent akan mengakibatkan 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>
Salin selepas log masuk

Tingkah laku ini mengesahkan bahawa MySQL dan InnoDB membenarkan nilai NULL ​​untuk lajur kunci asing dan hanya menguatkuasakan kekangan apabila nilai bukan NULL disediakan. Ini selaras dengan jangkaan bahawa kekangan kunci asing harus dikuatkuasakan apabila lajur kunci asing diisi dengan data, sambil membenarkan nilai NULL awal dalam lajur kunci asing.

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

sumber:php.cn
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