Да, MySQL 5.1 автоматически создает индекс в ссылочной таблице при определении ограничения внешнего ключа.MySQL требует индекс как для ссылочной таблицы, так и для ссылочной таблицы для внешних ключей.
Обратите внимание, что индекс создается автоматически только в ссылочной таблице, а не в ссылочной таблице.MySQL не позволит вам создать внешний ключ, который ссылается на поле в ссылочной таблице, которое не может использовать индекс:
CREATE TABLE orders (
id int PRIMARY KEY,
code int,
name varchar(10)
) ENGINE=INNODB;
CREATE TABLE order_details (
detail_id int PRIMARY KEY,
order_code int,
value int,
FOREIGN KEY (order_code) REFERENCES orders(code)
) ENGINE=INNODB;
ERROR 1005 (HY000): Can't create table 'test.order_details'
Это не очень часто, так как вы часто создаете ограничения внешнего ключакоторые ссылаются на первичный ключ ссылочной таблицы, а первичные ключи индексируются автоматически.Однако, вероятно, стоит иметь в виду.
Создание индекса в поле code
таблицы orders
решит проблему:
CREATE INDEX ix_orders_code ON orders(code);