In der Datenbankstruktur von
CREATE TABLE Country (
name varchar(40) NOT NULL,
PRIMARY KEY (name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE City (
name varchar(40) NOT NULL,
PRIMARY KEY (name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE Map (
country varchar(40) NOT NULL,
city varchar(100) NOT NULL,
PRIMARY KEY (country,city),
FOREIGN KEY (country) REFERENCES Country (name) ON DELETE CASCADE,
FOREIGN KEY (city) REFERENCES City (name) ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Ich erwarte, Eltern zu löschen, City
indem der entsprechende Wert in Kind durch diese drei gleichen Befehle intakt bleibt
FOREIGN KEY (city) REFERENCES City (name) ON DELETE NO ACTION
FOREIGN KEY (city) REFERENCES City (name) ON DELETE RESTRICT
FOREIGN KEY (city) REFERENCES City (name)
Aber wenn Sie NO ACTION
OR verwenden RESTRICT
oder weglassen ON DELETE
. Mit MySQL kann ich mit diesem Fehler nicht aus der übergeordneten Spalte löschen:
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails
('test'.'Map', CONSTRAINT 'Map_ibfk_2' FOREIGN KEY ('city') REFERENCES 'City'('name')
ON DELETE RESTRICT
Wo irre ich mich Ist es nicht die Verantwortung der SQLs NO ACTION
, das Elternteil zu löschen und das Kind verwaist zu lassen?
quelle