Tôi đã thử nghiệm việc tạo bảng của bạn.
Sau đó, tôi có thêm thông tin về lỗi khóa ngoại:
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.
...
Tôi thấy sự cố:bạn có khóa chính ghép ở city
trên các cột (Name, Code)
. Đối với điều này, bạn phải tạo một tham chiếu đến ràng buộc khóa ngoại cả hai các cột của khóa chính của cha mẹ.
Như thế này:
CONSTRAINT `Name`
FOREIGN KEY (`Name`, `Code`)
REFERENCES `calls`.`city` (`Name`, `Code`)
ON DELETE CASCADE
ON UPDATE CASCADE
Không khai báo một ràng buộc cho mỗi cột - hãy khai báo một ràng buộc tham chiếu đến cả hai cột của khóa.