web-dev-qa-db-de.com

Genaue Bedeutung des MySQL-Fremdschlüssels 'On Delete Restrict'-Klausel

Ich habe zwei MySQL-Tabellen: collections und privacy_level.
Ich definiere sie mit einer Fremdschlüssel Beziehung als solche:

CREATE TABLE collections (
  coll_id smallint NOT NULL AUTO_INCREMENT UNSIGNED,
  name varchar(30) NOT NULL,
  privacy tinyint NOT NULL UNSIGNED DEFAULT '0',
  PRIMARY KEY(coll_id),
  INDEX(privacy),
  FOREIGN KEY fk_priv (privacy) REFERENCES privacy_level (level) ON UPDATE CASCADE ON DELETE RESTRICT
) ENGINE=InnoDB;  

 CREATE TABLE privacy_level (
   level tinyint NOT NULL UNSIGNED,
   name varchar(20) NOT NULL,
   PRIMARY KEY (level)
 ) ENGINE InnoDB;  

Meine Frage bezieht sich auf die Klausel ON DELETE RESTRICT, Und ich konnte die Antwort nicht aus dem Online-Handbuch oder einer Google-Suche ableiten.

Bedeutet das, dass ich nie eine Zeile aus privacy_level Löschen kann?
Oder heißt das, dass ich kann nicht eine Zeile aus privacy_level Löschen wenn eine Zeile aus collections.privacy Habe Ein Wert, der dem Wert in privacy_level.level entspricht?

Das heißt, wenn privacy_levellevel = 2, name = 'top secret' Aber keinen Eintrag in Sammlungen hat. Die Privatsphäre hat privacy = 2, Kann ich den level = 2 Löschen. name = 'top secret' Eingeben? Oder ist es spaltenweit verboten?

Vielen Dank für jede Einsicht.

47
Donkey Trouble

ON DELETE RESTRICT bedeutet, dass Sie kann nicht eine angegebene übergeordnete Zeile löschen, wenn eine ntergeordnete Zeile vorhanden ist auf den Wert für diese übergeordnete Zeile verweist. Wenn die übergeordnete Zeile keine referenzierenden untergeordneten Zeilen enthält, können Sie diese übergeordnete Zeile löschen.

ON DELETE RESTRICT ist so ziemlich überflüssige Syntax, da dies sowieso das Standardverhalten für einen Fremdschlüssel ist.

97
Bill Karwin

Sie können auch ON DELETE CASCADE, dh wenn Sie das übergeordnete Element löschen, werden alle untergeordneten Elemente automatisch entfernt. Dies ist hilfreich, wenn Sie eine Tabelle mit einem anderen Element verknüpft haben, das einige Parameter oder Einstellungen enthält.