Нижеследующий набор команд:
alter table opportunities add column ownerId int null;
alter table opportunities add foreign key (ownerId) references users (id) on delete set null on update cascade;
Выдает ошибку, подобную этой:
Ошибка в ограничении внешнего ключа таблицы taous / # sql-318c_27:
В таблице "taous" нет индекса. "# Sql-318c_27", где отображаются столбцы
в качестве первых столбцов. Ограничение:
внешний ключ (ownerId) ссылается на пользователей (id) при удалении, устанавливает ноль при обновлении
;
Итак, я понимаю, что для указанного столбца отсутствует индекс
Теперь документация mysql для ограничений внешнего ключа гласит:
InnoDB требует индексов для внешних ключей и ссылочных ключей, чтобы проверка внешних ключей могла быть быстрой и не требовала сканирования таблицы. В ссылочной таблице должен быть индекс, в котором столбцы внешнего ключа перечислены как столбцы first в том же порядке. Такой индекс создается в ссылочной таблице автоматически, если он не существует. (Это отличается от некоторых более старых версий, в которых индексы должны были создаваться явно, или создание ограничений внешнего ключа не удавалось.) index_name
, если дано, используется, как описано ранее.
Я запускаю mysql 5.1 (xampp, windows), поэтому я ожидаю, что столбцы будут автоматически проиндексированы при создании внешнего ключа.
Есть идеи, почему может произойти сбой автоматической индексации?
Еще один момент:
Ошибка происходит только тогда, когда команды sql запускаются через PDO (инструмент обновления базы данных). При запуске напрямую в консоли mysql проблем нет.
Спасибо
Gidi