если возможно, установите внешний ключ на ноль, если он не совпадает ни с одной ссылкой

0

Я загружаю данные и сохраняю их в двух таблицах: table_1 и table_2, эти таблицы имеют отношение один ко многим:

  • table_1 columns: id, name
  • table_2: идентификатор table_1_id, col1, col2

Я не могу контролировать, какая таблица будет получать первую вставку. Например, если я получаю данные в table_2, некоторые записи все еще не существуют в таблице_1. Затем я получаю сообщение об ошибке

SQLSTATE [23000]: Нарушение ограничения целостности: 1452 Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполняется

В таблице_2 я установил значение по умолчанию для таблицы_1_id NULL, но все равно не удалось.

Возможно ли установить значение NULL table_1_id, если оно не соответствует ни одной строке в таблице_1?

Я использую Laravel 5.5 с MySQL

  • 1
    вы можете использовать SET FOREIGN_KEY_CHECKS = 0; перед вставкой данных
Теги:
laravel-5
laravel-5.5

1 ответ

0

Да, это возможно.

Когда SQL не удается выполнить вставку из-за некоторой ошибки, она правильно выбрасывает соответствующие исключения, как и в соединениях.NET Entity Framework, она выдает некоторые реализации SQLException. Таким образом, если вы хотите вставить нуль, если вставка не удалась из-за ограничения FK, вы можете поймать соответствующее исключение, созданное SQL с именем ограничения, а затем сделать необходимое.

В вашем случае создайте ограничение с именем. И в коде, когда вставка терпит неудачу, попробуйте поймать исключение и увидеть имя. Затем попробуйте изменить запись, заменив ее нулем и снова попробуйте вставить и увидите, как она вставлена.

Независимо от технологии, которую вы могли бы использовать, будет использоваться обработка excection SQL.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню