Попытка Запустить хранимую процедуру в MySQL, и она завершается неудачно из-за ограничения внешнего ключа.

Я написал простую хранимую процедуру с циклом while, который не работает. Вот некоторые данные для вас: родительская таблица - data_client_id. Все таблицы innoDB. Первичный ключ - это ID. Все остальные таблицы в схеме с префиксом data_ имеют этот столбец (data_client_id.id) в качестве внешнего ключа. Я сгенерировал некоторые фиктивные данные и вставил их в таблицу data_client_id, которая автоматически увеличивает первичный ключ. Сгенерированные строки были с 33 по 132. Я намеревался написать одну хранимую процедуру, которая создала бы строки с совпадающими значениями в столбце id для всех других таблиц data_.

Вот мой код:

mysql> DELIMITER //
mysql> CREATE PROCEDURE this()
    -> BEGIN
    -> DECLARE v1 INT;
    -> SET v1 = 33;
    -> WHILE v1 < 132 DO
    -> INSERT INTO data_banking (id) VALUES(v1);
    -> SET v1 = v1+1;
    -> END WHILE;
    -> END//
Query OK, 0 rows affected (0.00 sec)

Затем, когда я называю это (); Процедура я получаю следующую ошибку:

mysql> call this();
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails             (`oms_clients`.`data_banking`, CONSTRAINT `data_banking_FK` FOREIGN KEY (`id`) REFERENCES  `data_client_id` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION)

Я попытался просто запустить отдельные INSERT в таблицах data_ следующим образом: INSERT into data_banking (id) VALUES (34);

и это работало, устанавливая все столбцы со значениями по умолчанию NULL или их соответствующими значениями по умолчанию SET...

1 ответ

Решение

Нет ничего плохого в вашей хранимой процедуре.

Проблема в том, что вы не можете вставить прогон в data_banking, если только SAME id не существует в data_client_id. Каждый идентификатор с 33 по 132.

Чтобы устранить проблему, удалите ограничение или убедитесь, что зависимость от внешнего ключа разрешена.

Вот хорошая ссылка с некоторыми полезными советами:

Mysql ошибка 1452 - Не удается добавить или обновить дочернюю строку: ограничение внешнего ключа не удается

Другие вопросы по тегам