Können Fremdschlüsselspalten leer sein?
Kann eine Tabellenspalte, die einen Fremdschlüssel enthält, auf NULL gesetzt werden? Dies ist besonders wichtig in Situationen, in denen die Datenintegrität gewahrt bleiben muss, die Fremdschlüsselspalte jedoch möglicherweise nicht immer einen Wert hat.
Antwort: Durchsetzung bedingter Einschränkungen
Ja, es ist nur möglich, Fremdschlüsseleinschränkungen zu erzwingen, wenn der Wert nicht NULL ist. Dadurch wird die Datenintegrität sichergestellt und gleichzeitig Nullwerte in Fremdschlüsselspalten zugelassen.
Um dies zu veranschaulichen, betrachten Sie den folgenden MySQL-Beispielcode:
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;
Einfügevorgang mit NULL parent_id ist erfolgreich:
INSERT INTO child (id, parent_id) VALUES (1, NULL);
Das Einfügen eines Werts in parent_id, der in der übergeordneten Tabelle nicht 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`))
Dies weist darauf hin, dass Fremdschlüsseleinschränkungen nur erzwungen werden, wenn die Spalte parent_id eine gültige Referenz enthält, wodurch Nullwerte effektiv zugelassen werden, um die Einschränkung zu umgehen.
Das obige ist der detaillierte Inhalt vonKönnen Fremdschlüsselspalten NULL-Werte zulassen und gleichzeitig die Datenintegrität wahren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!