powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Ошибка 150 при создании внешнего ключа
9 сообщений из 34, страница 2 из 2
Ошибка 150 при создании внешнего ключа
    #36437762
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
покажите результат вот такого запроса:
Код: plaintext
SELECT @@sql_mode;
...
Рейтинг: 0 / 0
Ошибка 150 при создании внешнего ключа
    #36437806
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinovпокажите результат вот такого запроса:
Код: plaintext
SELECT @@sql_mode;

Пусто.
...
Рейтинг: 0 / 0
Ошибка 150 при создании внешнего ключа
    #36437835
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все, я кажется понял. Спасибо за подсказку про SHOW INNODB STATUS;

База переехала недавно с тестового сервера на новый. Так вот на новом сервере, в отличие от прошлого, оказывается включена чувствительность к регистру в названиях таблиц.

Все таблицы когда-то были заглавными буквами (наследие Firebird). Потом сделали строчными, но в скриптах не везде в FK поменяли.

Ну почему при создании FK нельзя было внятно ругаться?
...
Рейтинг: 0 / 0
Ошибка 150 при создании внешнего ключа
    #36437874
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так у вас FK вообще не создавался?
Если так - то устанавите что-то типа такого (хотя бы для сессии):
Код: plaintext
1.
SET sql_mode='TRADITIONAL';
/* или выберите по вкусу из документации */
...
Рейтинг: 0 / 0
Ошибка 150 при создании внешнего ключа
    #36438159
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinovтак у вас FK вообще не создавался?

В том то и дело, что создавался. Но только при помощи вот такой конструкции:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SET FOREIGN_KEY_CHECKS= 0 ;

ALTER TABLE book_persons
   ADD CONSTRAINT FK_BOOK_PERS2BOOKINFO FOREIGN KEY (book_id)
      REFERENCES BOOKINFO (book_id)
      ON DELETE CASCADE
      ON UPDATE RESTRICT;

SET FOREIGN_KEY_CHECKS= 1 ;

Без SET FOREIGN_KEY_CHECKS=0; ругался, как я в самом начале описал
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Ошибка 150 при создании внешнего ключа
    #38246541
Sentoki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftАлександр ГoлдунInnoDB не должен нормально работать с настройками по-умолчанию?По современным меркам - нет.Если БД экспортированная с одного сервера через phpminiadmin не импортируется на другой, выдавая ту самую ошибку 150, то это проблема с настройками mysql сервера? Логично ведь?
Не выполняется даже самый первый запрос из sql-файла.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TABLE `answers` (
  `id` int(11) NOT NULL auto_increment,
  `quest_id` int(11) NOT NULL default '0',
  `content` varchar(500) NOT NULL,
  `rights` tinyint(4) default '0',
  `zindex` smallint(6) default NULL,
  PRIMARY KEY  (`id`),
  KEY `FK` (`quest_id`),
  CONSTRAINT `answers_ibfk_1` FOREIGN KEY (`quest_id`) REFERENCES `questions` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=57 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;



Выдаётся:=====================================
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

Что я делаю не так?
...
Рейтинг: 0 / 0
Ошибка 150 при создании внешнего ключа
    #38246746
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SentokiЕсли БД экспортированная с одного сервера через phpminiadmin не импортируется на другой, выдавая ту самую ошибку 150, то это проблема с настройками mysql сервера? Логично ведь?
Не выполняется даже самый первый запрос из sql-файла.
Код: sql
1.
REFERENCES `questions` (`id`)

Нет, не логично. Настройки тут ни причем. Вы при создании первой таблицы сразу пытаетесь ссылаться на другую таблицу, которая, очевидно, в этот момент еще не существует.
Варианты:
1) С помощью foreign_key_checks перед созданием таблиц выключить проверку внешних ключей, а после создания, но до добавления данных - включить.
2) Создавать таблицы в таком порядке, чтобы они ссылались только на ранее созданные таблицы. Если есть кольцевые зависимости, то это вариант не пройдет.
3) Создавать таблицы без внешних ключей, а потом добавлять внешние ключи.
...
Рейтинг: 0 / 0
Ошибка 150 при создании внешнего ключа
    #38247003
Sentoki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft1) С помощью foreign_key_checks перед созданием таблиц выключить проверку внешних ключей, а после создания, но до добавления данных - включить.Спасибо, это помогло.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Ошибка 150 при создании внешнего ключа
    #39328216
vitaliy.artyukh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот комментарий отсюда 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!
...
Рейтинг: 0 / 0
9 сообщений из 34, страница 2 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Ошибка 150 при создании внешнего ключа
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]