Heim > Datenbank > MySQL-Tutorial > Können Fremdschlüsselspalten NULL-Werte in MySQLs InnoDB akzeptieren?

Können Fremdschlüsselspalten NULL-Werte in MySQLs InnoDB akzeptieren?

Barbara Streisand
Freigeben: 2025-01-11 07:33:51
Original
350 Leute haben es durchsucht

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

Fremdschlüssel und NULL-Werte in Datenbanktabellenspalten

Beim Datenbankdesign werden häufig Fremdschlüsseleinschränkungen verwendet, um die Datenintegrität sicherzustellen, indem Beziehungen zwischen Tabellen erzwungen werden. Es stellt sich jedoch die Frage: Dürfen Tabellenspalten mit Fremdschlüsseln NULL-Werte enthalten?

Wie in der bereitgestellten Frage gezeigt, kann es Situationen geben, in denen Fremdschlüsseleinschränkungen nur erzwungen werden müssen, wenn der Wert explizit festgelegt wird. Dadurch können Datensätze mit NULL-Werten zunächst in Fremdschlüsselspalten eingefügt werden, während die Datenintegrität nach dem Auffüllen der Werte gewährleistet wird.

In MySQL- und InnoDB-Tabellentypen ist es tatsächlich möglich, Fremdschlüssel ungleich NULL zu haben, die NULL-Werte zulassen. Das folgende Beispiel zeigt dies:

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;
Nach dem Login kopieren

Zulassen, dass Datensätze, bei denen parent_id NULL ist, in die child-Tabelle eingefügt werden:

INSERT INTO child (id, parent_id) VALUES (1, NULL);
Nach dem Login kopieren

Der Versuch, einen Datensatz einzufügen, dessen parent_id-Wert nicht in der parent-Tabelle vorhanden ist, führt jedoch zu einer Verletzung der Fremdschlüsseleinschränkung:

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`))
Nach dem Login kopieren

Dieses Verhalten bestätigt, dass MySQL und InnoDB NULL-Werte für Fremdschlüsselspalten zulassen und Einschränkungen nur erzwingen, wenn ein Nicht-NULL-Wert bereitgestellt wird. Dies steht im Einklang mit der Erwartung, dass Fremdschlüsseleinschränkungen erzwungen werden sollten, wenn die Fremdschlüsselspalte mit Daten gefüllt wird, während gleichzeitig anfängliche NULL-Werte in der Fremdschlüsselspalte zugelassen werden.

Das obige ist der detaillierte Inhalt vonKönnen Fremdschlüsselspalten NULL-Werte in MySQLs InnoDB akzeptieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage