[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Update MySQL
Renden
Всем привет, возможно глупый вопрос задам smile.gif
Скрипт делает:
update таблица значение в бла-бла=1 поле где id=$_post['val']

так вот надо ли делать сначала проверку на то что запись уже есть в базе (та что передается post) или пусть обновляет?
имеет ли смысл делать лишний запрос select from чтоб узнать есть запись или нет?
т.е грубо говоря запрос select или update будет быстрее?, и если в базе нет значения получается он выполнит 2 запроса заместо одного..
Просто этот запрос будет очень часто делаться как лучше будет?



Спустя 2 минуты, 43 секунды (8.10.2010 - 12:15) waldicom написал(а):
Делать select не обязательно. Можно просто проверять, что вернул такой update, если надо.
А вот что обязательно, так это проверять параметр $_post['val'] на всякие вредоносные штуки

Спустя 2 минуты, 7 секунд (8.10.2010 - 12:17) linker написал(а):
Собственно MySQL сам проверит, нужно ли апдейтить значение в поле или нет, отсюда вполне возможны неадекватные значения mysql_affected_rows()

Спустя 8 минут, 45 секунд (8.10.2010 - 12:26) Renden написал(а):
linker
Спасибо, это я и пытался узнать))

Спустя 35 минут, 19 секунд (8.10.2010 - 13:01) olex0731 написал(а):
Я считаю, что проверять на наличие существования записи совершенно необходимо... Вообще говоря, не проверяя, мы перекладываем часть логики на модель, что не есть правильно... При правильном построении индексов нагрузка на бд повысится совершенно незначительно, а вот позволять в скрипте неуправляемое поведение - это в корне не правильно! В общем, очень советую предусмотреть проверку перед тем, как делать любой запрос будь то insert, delete и т.д., Т.к. хоть в сервер и встроены средства проверки на некорректные запросы, но это не значит, что мы не должны пытаться их предотвратить.

Спустя 3 минуты, 35 секунд (8.10.2010 - 13:05) linker написал(а):
Поверять нужно, только если это необходимо, например, существование пользователя с указанным логином (при INSERT), для UPDATE нахрена оно нужно.

Спустя 1 час, 39 минут, 58 секунд (8.10.2010 - 14:45) olex0731 написал(а):
ну, я собственно написал выше почему нужно... Потому, что это правильно с точки зрения архитектуры приложения...

Спустя 2 минуты, 38 секунд (8.10.2010 - 14:47) vasa_c написал(а):
olex0731, а ежли мы проверили SELECT'ом, а за то время пока мы сподабливались выполнить UPDATE, нашу строку удалили? Куда тогда наше "управляемое поведение" покатится?

Цитата
Т.к. хоть в сервер и встроены средства проверки на некорректные запросы, но это не значит, что мы не должны пытаться их предотвратить.

Оттого, что UPDATE сработает на нуле строк, этот запрос ниразу не стал от этого некорректным.

Спустя 42 секунды (8.10.2010 - 14:48) vasa_c написал(а):
Цитата
ну, я собственно написал выше почему нужно... Потому, что это правильно с точки зрения архитектуры приложения...

Какой архитектуры? Вы в курсе какая архитектура у ТС?

Спустя 2 часа, 25 минут, 7 секунд (8.10.2010 - 17:13) olex0731 написал(а):
Цитата
Оттого, что UPDATE сработает на нуле строк, этот запрос ниразу не стал от этого некорректным.


Некорректной стала логика работы приложения...

Цитата
Какой архитектуры? Вы в курсе какая архитектура у ТС?


Любые серьезные разработки, helloworld не затрагиваю, используют разделение логики от модели...

Спустя 9 минут, 14 секунд (8.10.2010 - 17:22) waldicom написал(а):
Цитата (olex0731 @ 8.10.2010 - 16:13)

Цитата
Оттого, что UPDATE сработает на нуле строк, этот запрос ниразу не стал от этого некорректным.

Некорректной стала логика работы приложения...

С чего это такое утверждение? Возьмем пример, в котором записывается последняя айпишка юзера.
Вы будете сначала проверять, какая у него последняя, а потом исходя из этого делать или не делать update? Или просто запишите последнюю в базу?

Спустя 14 секунд (8.10.2010 - 17:23) linker написал(а):
Цитата
Некорректной стала логика работы приложения...
Чем логика стала не корректной?

Спустя 38 секунд (8.10.2010 - 17:23) vasa_c написал(а):
Э-э-э... Что есть по вашему логика, чем она отличается от модели и какое это имеет вообще отношение к исходному вопросу?

Спустя 8 минут, 33 секунды (8.10.2010 - 17:32) arvitaly написал(а):
Цитата
Я считаю, что проверять на наличие существования записи совершенно необходимо... Вообще говоря, не проверяя, мы перекладываем часть логики на модель, что не есть правильно... При правильном построении индексов нагрузка на бд повысится совершенно незначительно, а вот позволять в скрипте неуправляемое поведение - это в корне не правильно! В общем, очень советую предусмотреть проверку перед тем, как делать любой запрос будь то insert, delete и т.д., Т.к. хоть в сервер и встроены средства проверки на некорректные запросы, но это не значит, что мы не должны пытаться их предотвратить.


Все фигня.
И вообще наоборот лучше перекладывать все на mysql (и это можно сделать очень часто), как вы и сказали с грамотными индексами, триггерами, хранимками и т.д. Т.е. минимум кода приложения - максимум серверного (в данном случае mysql для PHP - сервер базы данных)

Спустя 51 минута, 19 секунд (8.10.2010 - 18:23) olex0731 написал(а):
Цитата
Чем логика стала не корректной?


Нельзя редактировать запись которой не существует. Не важно, останется ли потом сервер работоспособным или слетит нафиг(думаю в курсе чем чревато...)... Или Вы хотите сказать, что это логично?

Цитата
Э-э-э... Что есть по вашему логика, чем она отличается от модели и какое это имеет вообще отношение к исходному вопросу?


Вообще говоря это не совсем по-моему... Логика(контроллер) - это то, как программа обрабатывает входные данные и что выдает в результате. Модель - это интерфейс приложения(сайта) с, предположим, БД. Именно в контроллере принимается решение о запросе к БД и выполняется он посредством модели. Вообще говоря, лучше было бы познакомиться с mvc. Очень познавательно. А к исходному вопросу имеет такое отношение, что это и есть, фактически, архитектура проекта.

Цитата
И вообще наоборот лучше перекладывать все на mysql...


а что если сервер решим заменить??? и не будет там кучи проверок... весь код переписывать?

Спустя 39 минут, 32 секунды (8.10.2010 - 19:03) arvitaly написал(а):
Цитата
Нельзя редактировать запись которой не существует. Не важно, останется ли потом сервер работоспособным или слетит нафиг(думаю в курсе чем чревато...)... Или Вы хотите сказать, что это логично?


Вы все неправильно понимаете. При update: mysql пробегает по всей таблице и по условию where обновляет записи. И совершенно логично mysql_affected_rows мы увидим, сколько именно записей подошли под условие. И это логично.
И еще для того, что разработать программу - необходимо изучить из чего мы ее будет разрабатывать и тогда не будет возникать вопросов: слетит ли все или останется работоспособным.

Цитата
Вообще говоря это не совсем по-моему... Логика(контроллер) - это то, как программа обрабатывает входные данные и что выдает в результате. Модель - это интерфейс приложения(сайта) с, предположим, БД. Именно в контроллере принимается решение о запросе к БД и выполняется он посредством модели. Вообще говоря, лучше было бы познакомиться с mvc. Очень познавательно. А к исходному вопросу имеет такое отношение, что это и есть, фактически, архитектура проекта.


Это вообще не связано с задачей. Речь идет о возможностях mysql и php и их грамотном использовании. MVC тут не причем.

Цитата
а что если сервер решим заменить??? и не будет там кучи проверок... весь код переписывать?

Что такое - решим заменить сервер? Как вы думаете, что будет делать яндекс или гугл если решить заменить сервер. Скопирует дамп базы и код и запустит?

Спустя 11 минут, 20 секунд (8.10.2010 - 19:14) Ser18 написал(а):
Влезу сюда со своим вопросом

Можно ли поменять значение в таблиц БД по которому делается выборка в запросе
Типа такого

mysql_query("UPDATE mess_tema SET forum2='{$_POST['sel']}'  WHERE forum2= {$_POST['id_forum']}'")


Меняю forum2 где forum2= {$_POST['id_forum']

Спустя 5 минут, 28 секунд (8.10.2010 - 19:19) arvitaly написал(а):
Конечно, да и проверить ведь не долго user posted image

Спустя 2 минуты, 49 секунд (8.10.2010 - 19:22) Ser18 написал(а):
Просто у меня что то не работает
И я подумал может так нельзя

Спустя 56 минут, 23 секунды (8.10.2010 - 20:19) olex0731 написал(а):
Цитата
И еще для того, что разработать программу - необходимо изучить из чего мы ее будет разрабатывать и тогда не будет возникать вопросов: слетит ли все или останется работоспособным.

А если версия сменится и там поменяют политику обработки входных данных - тогда что?? Или не обновлять?

Цитата
Это вообще не связано с задачей. Речь идет о возможностях mysql и php и их грамотном использовании. MVC тут не причем.

Как-бы работа с использованием принципов этого паттерна и является, на данный момент, примером наиболее грамотного использования средств php.

Цитата
Что такое - решим заменить сервер? Как вы думаете, что будет делать яндекс или гугл если решить заменить сервер. Скопирует дамп базы и код и запустит?

Вообще говоря, переход на новое ПО и должен проходить с минимальным изменением кода...

Спустя 23 минуты, 45 секунд (8.10.2010 - 20:42) arvitaly написал(а):
Цитата
А если версия сменится и там поменяют политику обработки входных данных - тогда что?? Или не обновлять?

Какая политика? Версия чего? Языка?

Приложения пишут под конкретный язык под конкретную базу данных и иногда даже под конкретные сервера.

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

Цитата
Как-бы работа с использованием принципов этого паттерна и является, на данный момент, примером наиболее грамотного использования средств php.


Т.е. вы считаете что добавление абсолютно ненужных операций в код PHP - это MVC. Ну ок, мне все равно smile.gif

Цитата
Вообще говоря, переход на новое ПО и должен проходить с минимальным изменением кода...

ПО - это что?
Код и не будет меняться - вы противоречите сами себе: просто сервера будут настроены точно так же (Это образно).

И здесь тоже повторю - никто не делает продукты подо все на свете.
Допустим пишут под windows и linux, никто не будет писать под ОС которую еще не создали

Спустя 12 часов, 24 минуты, 13 секунд (9.10.2010 - 09:07) linker написал(а):
Цитата
Нельзя редактировать запись которой не существует.

А кто вам сказал что такую запись вообще будут редактировать? Или вы думаете MySQL тупой напрочь? Вот ваш подход:
1. Проверить на существование селектом
2. Если есть, то update
3. MySQL всеравно проверит нужно ли апдейтить или нет.
Посмотри, три шага, причем 1 и 3 фактически делают одно и тоже. Следовательно такой подход неверен в корне. Чтоб вы совсем поняли в чем проблема, то могу сказать, что ваш мозг тоже поступает некорректно, когда вы хотите прочитать что-то в книге, на определенной странице, то следуя вашей логике вы просто обязаны сделать:
1. Убедиться что страница существует и закрыть книгу.
2. Если страница существует, снова ее найти в книге.
3. Прочитать.
Не находите это бредом?

Спустя 10 минут, 37 секунд (9.10.2010 - 09:17) arvitaly написал(а):
Цитата
1. Убедиться что страница существует и закрыть книгу.
2. Если страница существует, снова ее найти в книге.
3. Прочитать.


smile.gif +1 адекватная ассоциация)

Спустя 2 часа, 49 минут, 29 секунд (9.10.2010 - 12:07) SlavaFr написал(а):
@olex0731 проверка на наличие в update нужна только в том случае, если возможна ошибка в базе данных. Например если ты хочеш unique key или primary key изменить, то в этом случае нужна проверка. Но даже в этом особом случае возможно условие проверки вставить в условие update. Если мы хотим изменить обычное поле, то нет не одного логичного аргумента, чтоб делать для этого предварительный селект.
В принципе update отличается от селекта только тем, что посредством SET изменяет найденые строчки, а не выдает их для просмотра. Принцип поиска в where не меняется обсалютно. Также нет не какой надобности задумыватся о том как найти количество измененных строк, так как во всех БД-специфических библиотеках и враперах типа PDO, ADO, ODBC имеется возможность узнать количество измененных строк после update или delete.

Спустя 24 минуты (9.10.2010 - 12:31) vasa_c написал(а):
Цитата
лучше было бы познакомиться с mvc. Очень познавательно.

не нужно только переводить дискуссию в русло "лучше было бы познакомиться с... вы все ламьё".

со своей стороны советую разобрать что означают такие понятия, как "атомарная операция" и "параллельные запросы".

Спустя 3 часа, 7 минут, 11 секунд (9.10.2010 - 15:38) arvitaly написал(а):
Цитата
проверка на наличие в update нужна только в том случае, если возможна ошибка в базе данных.


Да и то можно работать от исключения
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.