как использовать запрос обновления MySQL и запрос вставки MySQL вместе? - PullRequest
0 голосов
/ 26 июля 2011

это условие: в html и php есть форма, которая содержит около 120 полей для веб-сайта. Я делаю эту форму при отправке и перехожу на страницу php, где сначала извлекаю все значения, используя $ _REQUEST [], а затемвставить запрос вставить все из них в их конкретные столбцы в той же таблице в моей базе данных MySQL.Теперь мне придется сделать весь процесс снова для обновления этих значений.Синтаксис запроса на вставку и запроса на обновление совершенно разный.

Я не хочу писать еще 100 строк кода.Есть ли способ использовать код, который я написал внутри моего запроса вставки, чтобы обновить данные .?

Ответы [ 4 ]

6 голосов
/ 26 июля 2011

На самом деле в MySQL существует альтернативный синтаксис для вставки, который очень похож на синтаксис для обновления.Вы можете написать

insert customer set customerid=12345, firstname='Fred', lastname='Jones

и т. Д.

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

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

Другой вариант, который я иногда использовал, - написать небольшую функцию для создания операторов вставки и обновления.Тогда синтаксис вашей функции может быть одинаковым, независимо от того, насколько отличается сгенерированный код.

2 голосов
/ 26 июля 2011

Другая альтернатива, и в зависимости от требований и ключей, вы можете использовать:

replace into tbl (<cols>) values (<vals>)

который будет вставлен, если не существует, или заменен на основе ключей (вставка / обновление в одном запросе)

или если вы только вставляете и не хотите вставлять дважды, вы можете использовать:

insert ignore into tbl (<cols>) values (<vals>)

где, если запись уже вставлена ​​на основе ключей, она изящно игнорируется

для получения дополнительной информации http://dev.mysql.com/doc/refman/5.0/en/replace.html

1 голос
/ 26 июля 2011
INSERT INTO yourtable (field1, field2, field3, ...)
VALUES ($field1, $field2, $field3, ...)
ON DUPLICATE KEY UPDATE field1=VALUES(field1), field2=VALUES(field2), etc...

Подробности об этой конструкции здесь .

1 голос
/ 26 июля 2011

Существует довольно похожий синтаксис для INSERT и UPDATE :

INSERT INTO <table> SET
 column1 = value1,
 column2 = value2,
 ...
;

UPDATE <table> SET
 column1 = value1,
 column2 = value2,
 ...
WHERE <condition>
;
...