PHP MySQLi – insert_id 0 после вставки или обновления – следует ли сначала прочитать?

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

У меня есть API, который позволяет пользователям обновлять 2 таблицы за один вызов. Один из них представляет собой таблицу SUMMARY, а другую таблицу DETAIL с FK в таблицу SUMMARY .

То, что у меня есть, – это сделать UPSERT (вставить / обновить) в таблицу SUMMARY , захватить insert_id а затем удалить записи из таблицы DETAIL , а затем вставить те, которые мне нужны (ссылаясь на SUMMARY на fk, конечно).

Тем не менее, в случае отсутствия изменений в данных SUMMARY – insert_id возвращает 0 . Это кажется ожидаемым, поскольку ни одна строка не была обновлена ​​/ вставлена.

Вот мой вопрос:

Должен ли я делать полное чтение таблиц и сравнивать данные до этой попытки обновления / удаления / вставки? Или есть еще один отличный способ захватить id SUMMARY, который был дубликатом попытки UPSERT? Я чувствую, что мои пользователи будут «почти» ВСЕГДА менять данные SUMMARY и DETAIL при использовании этого API.

Какая здесь правильная практика кодирования? Является ли дополнительное чтение достоинством каждый раз? Или читать только, если insert_id = 0 ?

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

Опять мои варианты:

    • Прочтите db и сравните, чтобы увидеть, есть ли diff
    • Вставить / обновить соответственно
    • Попытка Вставить / обновить.
    • if (insert_id = 0), тогда прочитайте db, чтобы получить итоговый идентификатор для таблицы подробностей
    • процесс копирования
    • Попытка Вставить / Обновить
    • использовать? что-то? для получения идентификатора сводки записи, которая была дублирована (и предотвращена вставка / обновление)
    • используйте id для завершения шагов.