2012-03-22 3 views
1

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

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

ответ

0

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

0

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

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

Edit: http://dev.mysql.com/doc/refman/5.1/en/mysql-affected-rows.html

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

Я ищу ссылку относительно того, как MySQL решает, что именно «фактически изменилось» или нет. Основываясь на формулировке, очевидно предположить, что они означают, что он будет считаться как фактически измененный, если только если значения до и после не равны на двоичном уровне.

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

+0

Я также подумал о проблемах, связанных с преобразованием типов. Например, я мог представить, что дата, заданная с разрешением дня, может быть равна «DATETIME» с тем же днем, однако «UPDATE» повлияет на строку, установив время до 0:00:00. – dronus

+0

Я отредактировал '==' to '=', спасибо за эту коррекцию. – dronus

+0

Со всеми возможными преобразованиями (строки <-> номера <-> раз), теперь у меня плохое мнение, что ответ на мое первое утверждение будет «нет». – dronus

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