|
|
|
Ошибка 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 |
|
||
|
Ошибка 150 при создании внешнего ключа
|
|||
|---|---|---|---|
|
#18+
покажите результат вот такого запроса: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 09:29 |
|
||
|
Ошибка 150 при создании внешнего ключа
|
|||
|---|---|---|---|
|
#18+
Alex_Ustinovпокажите результат вот такого запроса: Код: plaintext Пусто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 09:58 |
|
||
|
Ошибка 150 при создании внешнего ключа
|
|||
|---|---|---|---|
|
#18+
Все, я кажется понял. Спасибо за подсказку про SHOW INNODB STATUS; База переехала недавно с тестового сервера на новый. Так вот на новом сервере, в отличие от прошлого, оказывается включена чувствительность к регистру в названиях таблиц. Все таблицы когда-то были заглавными буквами (наследие Firebird). Потом сделали строчными, но в скриптах не везде в FK поменяли. Ну почему при создании FK нельзя было внятно ругаться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 10:13 |
|
||
|
Ошибка 150 при создании внешнего ключа
|
|||
|---|---|---|---|
|
#18+
так у вас FK вообще не создавался? Если так - то устанавите что-то типа такого (хотя бы для сессии): Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 10:30 |
|
||
|
Ошибка 150 при создании внешнего ключа
|
|||
|---|---|---|---|
|
#18+
Alex_Ustinovтак у вас FK вообще не создавался? В том то и дело, что создавался. Но только при помощи вот такой конструкции: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Без SET FOREIGN_KEY_CHECKS=0; ругался, как я в самом начале описал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 11:49 |
|
||
|
Ошибка 150 при создании внешнего ключа
|
|||
|---|---|---|---|
|
#18+
miksoftАлександр ГoлдунInnoDB не должен нормально работать с настройками по-умолчанию?По современным меркам - нет.Если БД экспортированная с одного сервера через phpminiadmin не импортируется на другой, выдавая ту самую ошибку 150, то это проблема с настройками mysql сервера? Логично ведь? Не выполняется даже самый первый запрос из sql-файла. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Выдаётся:===================================== 130502 15:22:06 INNODB MONITOR OUTPUT ===================================== Per second averages calculated from the last 24 seconds ---------- SEMAPHORES ---------- OS WAIT ARRAY INFO: reservation count 4, signal count 4 Mutex spin waits 0, rounds 20, OS waits 0 RW-shared spins 8, OS waits 4; RW-excl spins 0, OS waits 0 ------------------------ LATEST FOREIGN KEY ERROR ------------------------ 130502 15:22:02 Error in foreign key constraint of table stimul_db/answers: FOREIGN KEY (`quest_id`) REFERENCES `questions` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB AUTO_INCREMENT=57 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC: Cannot resolve table name close to: (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB AUTO_INCREMENT=57 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC Версия mysql 5.1.69 phpmyadmin в серверных настройках пишет "have innodb YES". В my.cnf написано: автор# Uncomment the following if you are using InnoDB tables innodb_data_home_dir = /var/db/mysql innodb_data_file_path = ibdata1:10M:autoextend innodb_log_group_home_dir = /var/db/mysql # You can set .._buffer_pool_size up to 50 - 80 % # of RAM but beware of setting memory usage too high innodb_buffer_pool_size = 512M innodb_additional_mem_pool_size = 2M # Set .._log_file_size to 25 % of buffer pool size #innodb_log_file_size = 128M #innodb_log_buffer_size = 8M #innodb_flush_log_at_trx_commit = 1 innodb_lock_wait_timeout = 50 Что я делаю не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2013, 12:36 |
|
||
|
Ошибка 150 при создании внешнего ключа
|
|||
|---|---|---|---|
|
#18+
SentokiЕсли БД экспортированная с одного сервера через phpminiadmin не импортируется на другой, выдавая ту самую ошибку 150, то это проблема с настройками mysql сервера? Логично ведь? Не выполняется даже самый первый запрос из sql-файла. Код: sql 1. Нет, не логично. Настройки тут ни причем. Вы при создании первой таблицы сразу пытаетесь ссылаться на другую таблицу, которая, очевидно, в этот момент еще не существует. Варианты: 1) С помощью foreign_key_checks перед созданием таблиц выключить проверку внешних ключей, а после создания, но до добавления данных - включить. 2) Создавать таблицы в таком порядке, чтобы они ссылались только на ранее созданные таблицы. Если есть кольцевые зависимости, то это вариант не пройдет. 3) Создавать таблицы без внешних ключей, а потом добавлять внешние ключи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2013, 18:25 |
|
||
|
Ошибка 150 при создании внешнего ключа
|
|||
|---|---|---|---|
|
#18+
miksoft1) С помощью foreign_key_checks перед созданием таблиц выключить проверку внешних ключей, а после создания, но до добавления данных - включить.Спасибо, это помогло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2013, 09:25 |
|
||
|
Ошибка 150 при создании внешнего ключа
|
|||
|---|---|---|---|
|
#18+
вот комментарий отсюда http://dev.mysql.com/doc/refman/5.7/en/innodb-foreign-key-constraints.html котрый мне помог. у меня была проблема в том что у одного из полей небыло UNSIGNED. добавил и заработало. To avoid 'errno: 150' when dealing with integer data types, verify that the primary and foreign key columns of interest have the same integer types (size and sign, as indicated above). e.g. if primary key is 'unsigned int' and foreign key is simply 'int', then 'errno: 150' is likely. Took me a while to debug this! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2016, 14:33 |
|
||
|
|

start [/forum/topic.php?all=1&fid=47&tid=1831316]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
54ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
81ms |
get tp. blocked users: |
1ms |
| others: | 202ms |
| total: | 383ms |

| 0 / 0 |
