Следующий набор команд:
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) при удалении, устанавливает значение null при каскаде обновления;
Итак, я понимаю, что в указанном столбце отсутствует индекс
Теперь документация mysql для ограничений внешнего ключа утверждает:
InnoDB требует индексов внешних ключей и ключей, на которые есть ссылки, чтобы проверки внешнего ключа могли быть быстрыми и не требовали сканирования таблицы. В ссылающейся таблице должен быть индекс, в котором столбцы внешнего ключа перечислены как первые столбцы в том же порядке. Такой индекс создается для ссылающейся таблицы автоматически, если она не существует. (В этом отличие от некоторых более старых версий, в которых индексы нужно было создавать явно, иначе создание ограничений внешнего ключа не удалось бы.)
index_name
, если он задан, используется, как описано ранее.
Я запускаю mysql 5.1 (xampp, windows), поэтому я ожидаю, что столбцы будут автоматически индексироваться при создании внешнего ключа.
Есть идеи, почему автоматическая индексация может не работать?
Еще один момент: ошибка возникает только тогда, когда команды sql запускаются через PDO (инструмент обновления базы данных). При запуске прямо в консоли mysql никаких проблем.
Спасибо
Гиди
SHOW GRANTS
илиSELECT CURRENT_USER()
чтобы получить полное имя пользователя. - person outis   schedule 22.02.2011users
определен первичный ключ, и этот ключ состоит именно из столбцаid
? - person a_horse_with_no_name   schedule 22.02.2011