<rmcreative>

RSS

Все заметки с тегами «MySQL, InnoDB, FK»

  1. MySQL, InnoDB и внешние ключи

    14 мая 2010

    Довольно часто при попытке создать внешний ключ MySQL вываливает невнятные errno: xxx. Их описания в большинстве случаев ничего не дают, даже запутывают ещё больше.

    Реальных причин может быть несколько:

    1. Тип таблицы, на которую указывает ключ не InnoDB, SolidDB или PBXT.

    2. С одной из сторон ключа нет индекса (да, создавать его надо руками).

    3. С одной из сторон ключа нет столбца с указанными именем.

    4. Неверное описание отношения, например ON DELETE SET NULL для столбца NOT NULL.

    5. Ограничение с таким именем уже есть.

    6. Несовпадение типов полей, связываемых отношением. Например, нельзя использовать с одной стороны int(10) unsigned, а с другой int(11) или bigint.

    7. Нарушение целостности данных (integrity violation), т.е. когда ссылающийся id прописан, а в связываемой таблице его нет.

    Пожалуй, пятый случай самый сложный в отладке, поэтому лучше взять за правило именовать ключи, индексы и ограничения уникально.

    2 комментария