Предложения для вставки с ограничением внешнего ключа в mysql

У меня есть CREATE TABLE ` дб ` .` главный ` ( ` идентификатор ` INT ( 10 ) без знака NOT NULL , PRIMARY KEY (` идентификатор ') ); содержащий 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
);

ВЫБОР * ОТ Основной , где ID = «9» ; для этих 2 записей автоматически генерируются первичные ключи.

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

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

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

db

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

day

я получил

«Невозможно добавить или обновить дочернюю строку: внешний ключ fk_db_main не работает ( main_id. main, CONSTRAINT idFOREIGN KEY ( db.) ССЫЛКИ CREATE TABLE( main) ON УДАЛИТЬ НЕТ ДЕЙСТВИЙ НА ОБНОВЛЕНИИ НЕТ ДЕЙСТВИЙ) (1452)"

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

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

sql,mysql,

0

Ответов: 3


2

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


1

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

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

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


0 принят

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

SQL, MySQL,
Похожие вопросы
Яндекс.Метрика