Ich habe Ihre Tabellenerstellung getestet.
Dann habe ich mehr Informationen über den Fremdschlüsselfehler erhalten:
mysql> show engine innodb status\G
------------------------
LATEST FOREIGN KEY ERROR
------------------------
2018-02-20 14:51:33 700002d90000 Error in foreign key constraint of table calls/called:
FOREIGN KEY (`Code`)
REFERENCES `calls`.`city` (`Code`)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT `Number`
FOREIGN KEY (`Number`)
REFERENCES `calls`.`subscriber` (`Number`)
ON DELETE CASCADE
ON UPDATE CASCADE):
Cannot find an index in the referenced table where the
referenced columns appear as the first columns, or column types
in the table and the referenced table do not match for constraint.
...
Ich sehe das Problem:Sie haben einen zusammengesetzten Primärschlüssel in city
in den Spalten (Name, Code)
. Dazu müssen Sie einen erstellen Fremdschlüsseleinschränkung, die auf beide verweist Spalten des Primärschlüssels des übergeordneten Elements.
So:
CONSTRAINT `Name`
FOREIGN KEY (`Name`, `Code`)
REFERENCES `calls`.`city` (`Name`, `Code`)
ON DELETE CASCADE
ON UPDATE CASCADE
Deklarieren Sie keine Einschränkung für jede Spalte – deklarieren Sie eine Einschränkung, die auf beide Spalten des Schlüssels verweist.