<rmcreative>

RSS

И ещё раз про невнятные ошибки 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

  1. №6157
    Bethrezen
    Bethrezen 18 апр. 2012 г., 20:28:32

    Видимо закралась ошибка в проектировании системы логирования ошибок

  2. №6158
    Алексей
    Алексей 18 апр. 2012 г., 21:29:42

    Не-не-не. Ни какой ошибки. Так половина эксепшенов мускуля выглядит.

  3. №6165
    Максим
    Максим 20 апр. 2012 г., 1:19:08

    По-моему вопрос риторический итак понятно каким местом. Да, с innodb ошибки вообще малоинформативные. Спасибо.

  4. №6169
    Max
    Max 24 апр. 2012 г., 4:19:16

    "SHOW WARNINGS;" in console achieves the same thing with less verbosity to go through...

    PS Sorry for English

  5. №6987
    mysql
    mysql 06 нояб. 2012 г., 3:28:01

    Все очень просто : стандартная программистская тяга к обобщениям. Из-за нее mysql представляет из себя интерфейс к множеству движков хранения и эти движки слабосвязаны. Так же и локализация по номерам ошибок отвязана от кода движка. Есть еще масса практических упущений, но винить некого. Отрасль сама благоволит таким программистам поощряя разделение на всех уровнях проектирования. Нешто вы сами не занимались упрощением АПИ ?

    В данном случае движок может вернуть код, но не может вернуть сообщение. На практике люди просто знают, что видя ошибку 150 или 152 надо внимательно подумать над фигней написанной в foreign key.

  6. №7704
    zedget
    zedget 18 марта 2013 г., 16:44:27

    @mysql: а где же список всех ошибок по номерам?

  7. №8559
    Артем
    Артем 12 нояб. 2013 г., 13:10:25

    На сколько я помню - система хранения InnoDB изначально разрабатывалась сторонней организацией: Innobase автором её считается Хейкки Туури. Так что помидоры в сторону MySQL - наверно все таки не по адресу :)

  1. Почта опубликована не будет.

  2. Можно использовать синтаксис Markdown или HTML.

  3. Введите ответ в поле. Щёлкните, чтобы получить другую задачу.