Я думаю, вы используете таблицы MyISAM.
Если вы запустите "SHOW CREATE TABLE OrderItems
", вы увидите, что не удалось записать определение внешнего ключа.
Таблицы MyISAM не поддерживают внешние ключи. MySQL анализирует синтаксис, но затем молча отбрасывает его при использовании MyISAM. Если вы используете таблицы InnoDB как для Orders, так и для OrderItems, это будет работать лучше.
InnoDB должен быть включен по умолчанию. Было бы необычно для этого быть отключенным. Вы можете проверить, что вы делаете так:
mysql> show variables like 'have_innodb';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_innodb | YES |
+---------------+-------+
Если это так, тогда вы можете указать ENGINE=INNODB
, когда вы CREATE
или ALTER
таблица:
mysql> ALTER TABLE Orders ENGINE=INNODB;
mysql> ALTER TABLE OrderItems ENGINE=INNODB;
Обязательно перепроверьте, что это удалось, с SHOW CREATE TABLE <name>
.
Теперь вы можете добавить ограничение, и оно должно вступить в силу.