MySQL эквивалентность и обновления

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

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

2 ответа

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

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

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

Изменить: http://dev.mysql.com/doc/refman/5.1/en/mysql-affected-rows.html

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

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

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

Другие вопросы по тегам