Heim >Datenbank >MySQL-Tutorial >Erlauben Fremdschlüsseleinschränkungen in MySQL InnoDB NULL-Werte?
Fremdschlüsseleinschränkungen und NULL-Werte in MySQL InnoDB-Tabellen
Frage:
Können Fremdschlüsseleinschränkungen in einer Datenbanktabelle weiterhin wirksam werden, wenn die Spalte NULL-Werte enthält? Wie verhalten sich Fremdschlüsseleinschränkungen insbesondere im Kontext von MySQL- und InnoDB-Tabellen, wenn ein NULL-Wert auftritt?
Antwort:
Ja, Fremdschlüsseleinschränkungen können nur erzwungen werden, wenn der Wert der Fremdschlüsselspalte nicht NULL ist. Dies ermöglicht Flexibilität bei der Datenverwaltung und gewährleistet die Datenintegrität.
Wenn in MySQL eine Tabellenspalte mit einer Fremdschlüsseleinschränkung einen NULL-Wert enthält, wird die Einschränkung nicht überprüft. Dies bedeutet, dass für Zeilen mit NULL in der Fremdschlüsselspalte keine Eltern-Kind-Beziehung erzwungen wird.
Wenn jedoch ein Nicht-NULL-Wert in eine Fremdschlüsselspalte eingefügt wird, prüft die Datenbank, ob der Wert in der referenzierten Tabelle vorhanden ist. Wenn der Wert nicht vorhanden ist, wird ein Fehler ausgelöst und der Einfügevorgang schlägt fehl, wodurch die referenzielle Integrität verhindert wird.
Beispiel:
Betrachten Sie die übergeordneten und untergeordneten Tabellen mit der folgenden Struktur:
<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>
Die folgende Abfrage veranschaulicht das Verhalten von Fremdschlüsseleinschränkungen mit NULL-Werten:
<code class="language-sql">INSERT INTO child (id, parent_id) VALUES (1, NULL); -- 查询成功,因为 parent_id 为 NULL。 INSERT INTO child (id, parent_id) VALUES (2, 10); -- 查询失败,因为没有 id 为 10 的 parent 行。</code>
Dies weist darauf hin, dass Fremdschlüsseleinschränkungen nur erzwungen werden, wenn die Fremdschlüsselspalte einen Wert ungleich NULL enthält.
Das obige ist der detaillierte Inhalt vonErlauben Fremdschlüsseleinschränkungen in MySQL InnoDB NULL-Werte?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!