Внешние ключи поддерживаются только тогда, когда MySQL использует механизм хранения InnoDB .
MySQL использует MyISAM в качестве механизма хранения по умолчанию, где ограничения внешнего ключа просто игнорируются.
Попробуйте ваш пример со следующими таблицами:
CREATE TABLE products (
id integer unsigned auto_increment primary key
) ENGINE=INNODB;
CREATE TABLE orders (
id integer PRIMARY KEY auto_increment,
product_id integer unsigned,
quantity integer,
INDEX product_id_idx (product_id),
FOREIGN KEY (product_id) REFERENCES products (id)
) ENGINE=INNODB;
Также убедитесь, что ссылочные и ссылочные столбцы имеют одинаковый тип данных.