|
|
|
Ошибка 150 при создании внешнего ключа
|
|||
|---|---|---|---|
|
#18+
При попытке создать внеший ключ таким вот запросом: Код: plaintext 1. 2. 3. 4. 5. сервер выдает такую ошибку: Код: plaintext 1. При этом потенциальных нарушений будущего ключа нет, что подтверждается таким запросом: Код: plaintext 1. 2. Куда копать? Задача усугубляется еще тем, что я не DBA и не root этого сервера, а те, кто его инсталлировали, возможно в MySQL разбираются еще меньше, чем я. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2010, 23:49 |
|
||
|
Ошибка 150 при создании внешнего ключа
|
|||
|---|---|---|---|
|
#18+
долго перечислять варианты ошибок: - тип таблицдолжен быть InnoDB - типы полей в связи должны совпадать (включая UNSIGNED) - т.д. и т.п. приведите DDL ("SHOW CREATE TABLE ... ") для этих таблиц - сразу будет видно, Что и Поч'ем ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 00:14 |
|
||
|
Ошибка 150 при создании внешнего ключа
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Первая таблица "широкая", больше 40 полей, несколько мемо-полей, около 70 тысяч записей. Второая - около 250 тысяч записей. С метаданными все ОК. Сужу исключительно по тому, что на пустой базе скрипт нормально выполнялся и FK создавался. Потом временно потребовалось дропнуть ключ. И вот теперь по новой создать его не получается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 00:46 |
|
||
|
Ошибка 150 при создании внешнего ключа
|
|||
|---|---|---|---|
|
#18+
Александр Гoлдун , я бы на вашем месте попробовал создать эквивалентные по структуре таблицы, создать этот ключ и залить туда данные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 01:15 |
|
||
|
Ошибка 150 при создании внешнего ключа
|
|||
|---|---|---|---|
|
#18+
Разнообразные обходные пути я могу придумать, спасибо. Но мне интересно, в чем именно тут проблема, как это локализовать и исправить непосредственно, а не обойти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 11:50 |
|
||
|
Ошибка 150 при создании внешнего ключа
|
|||
|---|---|---|---|
|
#18+
Александр Гoлдун, Посмотрите внимательно, может такой FK (с тем же именем) уже существует?... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 11:53 |
|
||
|
Ошибка 150 при создании внешнего ключа
|
|||
|---|---|---|---|
|
#18+
Александр ГoлдунНо мне интересно, в чем именно тут проблема, как это локализовать и исправить непосредственно, а не обойти.Ну вот в процессе контролируемой заливки данных и выяснится, на каких именно записях возникает проблема. Если, конечно, верить вашему "на пустой базе скрипт нормально выполнялся и FK создавался". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 11:59 |
|
||
|
Ошибка 150 при создании внешнего ключа
|
|||
|---|---|---|---|
|
#18+
Alex_UstinovАлександр Гoлдун, Посмотрите внимательно, может такой FK (с тем же именем) уже существует?... Смотрел внимательно. Не существует. Пробовал создать со случайным именем. Пофиг. Мало того, вроде была еще одна точно такая ошибка при попытке создать другой FK c двумя другими таблицами. Тоже заполненными ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 12:02 |
|
||
|
Ошибка 150 при создании внешнего ключа
|
|||
|---|---|---|---|
|
#18+
Но при этом нет однозначной связи типа "заполнено - не создается FK". По некоторым заполненным FK отлично создается. Но надо отметить, что там меньше записей было. Может кто-нибудь подскажет хотя бы расшифровку - что значит ошибка 150? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 12:06 |
|
||
|
Ошибка 150 при создании внешнего ключа
|
|||
|---|---|---|---|
|
#18+
Александр ГoлдунМожет кто-нибудь подскажет хотя бы расшифровку - что значит ошибка 150? http://dev.mysql.com/doc/refman/5.0/en/innodb-error-codes.html http://dev.mysql.com/doc/refman/5.0/en/innodb-foreign-key-constraints.html искать в тексте по числу 150. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 12:15 |
|
||
|
Ошибка 150 при создании внешнего ключа
|
|||
|---|---|---|---|
|
#18+
таблицы(а) у вас объемные, индекс тоже будет весить достаточно много. Проверьте квоты на директорию с базой данных (в самой ОС-Дебиан) и квоты на InnoDB в файле настроек my.cfg А error 150 - это очень обширная ошибка, Гуглите - убедитесь сами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 12:19 |
|
||
|
Ошибка 150 при создании внешнего ключа
|
|||
|---|---|---|---|
|
#18+
Alex_Ustinovтаблицы(а) у вас объемные, индекс тоже будет весить достаточно много. 100 - 200 тысяч записей - это объёмные???? Это пилотный проект, в рабочем режиме в упомянутых таблицах планируется по неск. миллионов записей. Насколько мне известно, там выделенный физический сервер под это, вполне мощный, адекватно предполагаемым нагрузкам. Квот нет. Конфиг перепроверят еще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 12:48 |
|
||
|
Ошибка 150 при создании внешнего ключа
|
|||
|---|---|---|---|
|
#18+
Можно после выполнения вашего скрипта по созданию FK выполнить Код: plaintext И анализируйте ответ сервера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 13:09 |
|
||
|
Ошибка 150 при создании внешнего ключа
|
|||
|---|---|---|---|
|
#18+
Посказали обходное решение, которое помогло на всех таких ключах: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Но перед этим я ещё раз перепроверил, нет ли нарушений этого ключа. Их ТОЧНО нет. В чем могла быть эта проблема? "Родовая травма" MySQL с InnoDb, как мне подсказали? Как выяснилось, не у меня одного подобные проблемы были. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 13:22 |
|
||
|
Ошибка 150 при создании внешнего ключа
|
|||
|---|---|---|---|
|
#18+
Александр ГoлдунПосказали обходное решение, которое помогло на всех таких ключах:Это решение не проверяет нарушение ключей уже имеющимися данными. Александр ГoлдунНо перед этим я ещё раз перепроверил, нет ли нарушений этого ключа. Их ТОЧНО нет.Проверьте план этого проверочного запроса. Измените запрос так, чтобы не могли использоваться индексы и сравните результат. Отдельно проверьте наличие NULL-ов в обоих полях book_id. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 13:36 |
|
||
|
Ошибка 150 при создании внешнего ключа
|
|||
|---|---|---|---|
|
#18+
Какие NULL в первичном ключе? Вы о чем? Вы такие страшные вещи говорите, что у меня начинают закрадываться еще более жуткие сомнения по поводу MySQL Тем не менее, запустил проверочный запрос: Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 14:20 |
|
||
|
Ошибка 150 при создании внешнего ключа
|
|||
|---|---|---|---|
|
#18+
Александр ГoлдунКакие NULL в первичном ключе? Вы о чем? Вы такие страшные вещи говорите, что у меня начинают закрадываться еще более жуткие сомнения по поводу MySQL О том, что таблица или какой-то из ее индексов могли быть повреждены. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 14:23 |
|
||
|
Ошибка 150 при создании внешнего ключа
|
|||
|---|---|---|---|
|
#18+
Могу поверить в случайное повреждение одного индекса в одной таблице. Но не в нескольких же, особенно в несвязанных между собой! Нет, тут явно проблема в чем-то другом. Может в каких-то настройках? Чего ему не хватает? Из статистики смутил такой раздел: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Выделенное - это нормально? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 15:03 |
|
||
|
Ошибка 150 при создании внешнего ключа
|
|||
|---|---|---|---|
|
#18+
Александр Гoлдун, а покажите ваш конфиг ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 15:36 |
|
||
|
Ошибка 150 при создании внешнего ключа
|
|||
|---|---|---|---|
|
#18+
/etc/mysql$ cat my.cnf | grep -v '#' Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 16:05 |
|
||
|
Ошибка 150 при создании внешнего ключа
|
|||
|---|---|---|---|
|
#18+
Александр Гoлдун, у вас под InnoDB вообще настроек нет. я бы рекомендовал начать с innodb_buffer_pool_size ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 16:53 |
|
||
|
Ошибка 150 при создании внешнего ключа
|
|||
|---|---|---|---|
|
#18+
Получается, совершенно дефолтные настройки. InnoDB не должен нормально работать с настройками по-умолчанию? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2010, 12:40 |
|
||
|
Ошибка 150 при создании внешнего ключа
|
|||
|---|---|---|---|
|
#18+
Александр ГoлдунInnoDB не должен нормально работать с настройками по-умолчанию?По современным меркам - нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2010, 12:42 |
|
||
|
Ошибка 150 при создании внешнего ключа
|
|||
|---|---|---|---|
|
#18+
Просто засада какая-то! Создал ключ вышеописанным способом. Разумеется, убедился и до и после, что он не нарушается. Пытаюсь залить данные - ругается на нарушение этого первичного ключа. Думал, может ошибка в программе. Для диагностики убрал снова этот FK, чтобы можно было увидеть записи, которые его нарушили. Прошла заливка. Смотрю записи - а нарушений то нет!!! Почему оно ругалось? Как этот бред диагностировать? И вообще самый главный вопрос, который все больше беспокоит: Foreign Keys в MySQL вообще пригодны для реального использования или это чисто фича для галочки, чтоб не стыдно было перед конкурентами похвастаться, а все по привычке лепят MyISAM без ссылочной целостности? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 00:19 |
|
||
|
Ошибка 150 при создании внешнего ключа
|
|||
|---|---|---|---|
|
#18+
Значит так, детали. Все та же таблица bookinfo, таблица book_persons, FK между ними: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. FK как раз пришлось создавать описанным способом через Ж. Нарушений этого FK нет. Выполняю запрос: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. [mysqld-5.0.51a-24+lenny2]Cannot add or update a child row: a foreign key constraint fails (`db_books/book_persons`, CONSTRAINT `FK_BOOK_PERS2BOOKINFO` FOREIGN KEY (`book_id`) REFERENCES `BOOKINFO` (`book_id`) ON DELETE CASCADE) Т.е. явно ругается на этот FK. А такое может быть только в том случае, если отсутствует родительская запись с book_id=5488. Что я и проверяю запросом в том же сеансе: Код: plaintext Что с этим делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 00:46 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=90&tid=1831316]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
48ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 210ms |
| total: | 360ms |

| 0 / 0 |
