SQL: вставить как 1 запрос со всеми полями, или несколько запросов?

0

Итак, у меня есть вопрос относительно наилучшей практики для страницы PHP, вставляющей новую строку в таблицу. Есть некоторые обязательные поля (aka NOT NULL) и некоторые необязательные поля (может быть NULL). Лучше ли вставлять все с одним запросом или просто делать необходимые поля, получать вставленный идентификатор и обновлять другие поля одним или несколькими другими запросами?

Есть ли большой успех, если я делаю несколько обновлений с помощью where <primary key> = "x"? Или лучше сделать несколько обновлений, чтобы, если одно из дополнительных обновлений не работает, остальное делать?

Теги:
insert

3 ответа

6
Лучший ответ

В общем, вы должны сделать один INSERT со всеми значениями. Это будет менее дорогостоящим с точки зрения обработки базы данных, но не менее важно (или более), что значительно упростит ваш код приложения.

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

  • 0
    Если в ваших «установщиках» была бизнес-логика, вы можете предпочесть создать запись, извлечь ее как бизнес-объект, а затем обновить значения, чтобы избежать дублирования кода.
1

Я бы использовал один запрос по двум причинам:

  • Каждый вызов в базу данных будет добавлять накладные расходы для вашего приложения. Если вам удастся сделать только одно обновление, которое сделает это таким образом.
  • Если вы используете отдельные вызовы, возможно, кто-то попытается просмотреть данные между обновлениями и увидеть "неполные" данные.
0

Для одной строки вы действительно должны делать один INSERT. Если есть подозрение, что значение столбца не является допустимым, перед тем, как сделать INSERT, следует добавить дополнительный уровень на уровне приложения, чтобы проверить код (тип данных, длину данных и т.д.).

У вас будет более сложный код таким образом и будет оказывать меньшее влияние на сервер приложений, сервер баз данных и сеть в одно и то же время.

Ещё вопросы

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