И ещё раз про невнятные ошибки MySQL
18 апреля 2012
Снова наткнулся на совсем-совсем невнятные ошибки MySQL. Всё больше убеждаюсь, что о людях при написании данной его части никто не думал.
ALTER TABLE `post` DROP FOREIGN KEY `FK_Post_UserID`
В результате получаем:
SQLSTATE[HY000]: General error: 1025 Error on rename of './mydb/post' to './mydb/#sql2-11a-1f2c' (errno: 152)
Очень помогло…
Оказывается, нормальую информацию, получить всё-таки можно. Правда, через одно место:
SHOW ENGINE INNODB STATUS
отдаст нам кучу всего, в том числе:
LATEST FOREIGN KEY ERROR ------------------------ 120418 16:58:22 Error IN dropping of a FOREIGN KEY CONSTRAINT of TABLE "mydb"."post", IN SQL command ALTER TABLE `post` DROP FOREIGN KEY `FK_Post_UserID` Cannot find a CONSTRAINT WITH the given id "FK_Post_UserID".
Вот это уже намного понятней. У нас просто нет FK с таким именем. Интересно, чем руководствовались разработчики MySQL, скрывая от конечного пользователя действительно важную для него информацию?
Комментарии RSS по email OK
Видимо закралась ошибка в проектировании системы логирования ошибок
Не-не-не. Ни какой ошибки. Так половина эксепшенов мускуля выглядит.
По-моему вопрос риторический итак понятно каким местом. Да, с innodb ошибки вообще малоинформативные. Спасибо.
"SHOW WARNINGS;" in console achieves the same thing with less verbosity to go through...
PS Sorry for English
Все очень просто : стандартная программистская тяга к обобщениям. Из-за нее mysql представляет из себя интерфейс к множеству движков хранения и эти движки слабосвязаны. Так же и локализация по номерам ошибок отвязана от кода движка. Есть еще масса практических упущений, но винить некого. Отрасль сама благоволит таким программистам поощряя разделение на всех уровнях проектирования. Нешто вы сами не занимались упрощением АПИ ?
В данном случае движок может вернуть код, но не может вернуть сообщение. На практике люди просто знают, что видя ошибку 150 или 152 надо внимательно подумать над фигней написанной в foreign key.
@mysql: а где же список всех ошибок по номерам?
На сколько я помню - система хранения InnoDB изначально разрабатывалась сторонней организацией: Innobase автором её считается Хейкки Туури. Так что помидоры в сторону MySQL - наверно все таки не по адресу :)