Ошибка ссылается на полное имя таблицы, то есть имя вашей схемы emptdept
, а имя таблицы Orders
.
Я могу воспроизвести эту ошибку на MySQL 8.0, если таблица Orders
это MyISAM (или что-то другое, кроме InnoDB, я полагаю).
mysql> CREATE TABLE `proj` (
-> `projno` int(11) NOT NULL,
-> PRIMARY KEY (`projno`)
-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
mysql> CREATE TABLE `orders` (
-> `porj` int(11) DEFAULT NULL
-> ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
mysql> ALTER TABLE Orders ADD CONSTRAINT FK_ProjectNumber FOREIGN KEY (porj) REFERENCES proj(projno);
ERROR 1146 (42S02): Table 'test.Orders' doesn't exist
Таблицы MyISAM не поддерживают ограничения внешнего ключа.
Жаль, что сообщение об ошибке так неясно. Таблица существует, но ее нет в словаре данных InnoDB. Я думаю, это их аргументация.
Я не вижу той же ошибки в MySQL 5.7, вместо этого я получаю следующий результат:
Query OK, 0 rows affected (0.02 sec)
Когда вы пытаетесь создать внешний ключ на в таблице MyISAM в MySQL 5.7 операция незаметно игнорируется. Это не вызывает никаких ошибок, оно просто не делает этого.
С новой реализацией словаря данных InnoDB в MySQL 8.0 они, наконец, выдают ошибку, вместо того, чтобы молча принять ALTER TABLE для неподдерживаемая функция.
Кстати, я рекомендую вам больше не использовать таблицы MyISAM. Они постепенно устаревают.