Предложения по вставке с ограничением внешнего ключа в MySQL - PullRequest
0 голосов
/ 30 мая 2009

У меня есть таблица, содержащая 2 записи.

Что-то вроде

CREATE TABLE  `db`.`main` (
  `id` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`)
);

Идентификатором для этих 2 записей являются автоматически генерируемые первичные ключи.

У меня есть другая таблица со связующим правилом

CREATE TABLE  `db`.`day` (
    `main_id` int(10) unsigned NOT NULL,
    `day` tinyint(4) NOT NULL,
    CONSTRAINT `fk_db_main` FOREIGN KEY (`main_id`) REFERENCES `main` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
);

теперь я могу успешно получить результат, используя

SELECT * FROM main where id='9';

но когда я пытаюсь запустить

INSERT INTO day (main_id, day) VALUES (9, 0);

Я получаю

"Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполнено (db. day, CONSTRAINT fk_db_main FOREIGN KEY (main_id) ССЫЛКИ main (id) ВКЛ ОБНОВЛЕНИЕ НЕТ ДЕЙСТВИЙ) (1452) "

Любые предложения о том, что мне не хватает со вставкой?

** Я не указал действительную причину проблемы, когда задавал вопрос. Фактическая причина состояла в том, что главная таблица базы данных была в MyISAM, и таблицы InnoDB не могли создать внешний ключ, соединяющийся с ним. Короче говоря, MyISAM не поддерживает внешние ключи, даже если они приходят из других таблиц.

Ответы [ 3 ]

2 голосов
/ 30 мая 2009

Вставка работает для меня, если я удаляю части db. в операторах CREATE TABLE (и вставляю в main строку со значением id, равным 9). Возможно, проблема в том, что вы используете этот префикс db. непоследовательно, т. Е. После TABLE, но не в предложении CONSTRAINT ...?

1 голос
/ 30 мая 2009

Ограничение FOREIGN KEY говорит: «в таблице« main »должна быть запись со значением идентификатора, совпадающим с недавно добавленным значением« main_id »в таблице« day »».

Когда вы вставляете значение 9 в «день», в «main» уже есть строка с ID = 9?

СУБД так не считает - поэтому жаловалась.

0 голосов
/ 17 июня 2009

Я не указал действительную причину проблемы, когда задавал вопрос. Фактическая причина состояла в том, что главная таблица базы данных была в MyISAM, и таблицы InnoDB не могли создать внешний ключ, соединяющийся с ним. Короче говоря, MyISAM не поддерживает внешние ключи, даже если они приходят из других таблиц.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...