MySQL эквивалентность и обновления - PullRequest
1 голос
/ 22 марта 2012

При обновлении строки на UPDATE всегда ли гарантируется, что строка будет «затронута» тогда и только тогда, если некоторые поля, заданные в операторе UPDATE, будут содержать NOT field='value'?

Будет ли это также означать, что для любых двух непосредственно последовательных UPDATE с постоянными значениями полей вторая всегда будет "влиять" на 0 строк?

Ответы [ 2 ]

0 голосов
/ 22 марта 2012

Правильно по обоим пунктам (хотя оператор == не существует в MySQL - я предполагаю, что вы просто использовали его для ясности).

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

Редактировать: http://dev.mysql.com/doc/refman/5.1/en/mysql-affected-rows.html

Для операторов UPDATE значение затрагиваемых строк по умолчанию - это количество фактически измененных строк. Если вы укажете флаг CLIENT_FOUND_ROWS для mysql_real_connect () при подключении к mysqld, значение затрагиваемых строк будет количеством «найденных» строк; то есть соответствует предложению WHERE.

Я ищу ссылку на то, как MySQL решает, что "фактически изменилось" или нет. Исходя из формулировки, очевидно, что они означают, что они будут считаться фактически измененными, только если значения до и после не равны на двоичном уровне.

Не углубляясь в источник, я, вероятно, не смогу доказать это, хотя.

0 голосов
/ 22 марта 2012

да, потому что результат показывает только нет строк, которые были изменены в SQL-запросе, поэтому второй запрос не изменяет ни одной строки, поскольку первый запрос уже выполнен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...