2009-11-25 1 views
0

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

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

ответ

6

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

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

+0

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

1

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

  1. Каждый вызов к базе данных собирается добавить накладные расходы к вашему приложению. Если вы можете уйти, просто сделав одно обновление, которое сделает это именно так.
  2. Если вы используете отдельные вызовы, возможно, кто-то попытается просмотреть данные между обновлениями и увидеть «неполные» данные.
0

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

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

Смежные вопросы