Обновление записи и row_count

Users
Дата: 31.12.2012 00:50:16
Доброго

Есть процедура, в ней апдейт:

UPDATE my_table
SET Id_WordClass = iId_WordClass
WHERE Id_Element = iId_Element;

SET oRes = ROW_COUNT();

Допустим, что iId_WordClass = 5. iId_Element = 7

Первый раз мне возвращается 1. Второй раз с теми же параметрами процедуры - 0. Умный Mysql проверяет параметры и не обновляет, если там уже 5 стоит?
А как бы ему обьяснить, что умничать не надо, а надо обновить, не проверяя?

Как-то возможно проверить - почему именно запись не обновлена? Мне нужен код возврата: мол, -1 - это просто не найдена строка с таким iId_Element = 7, поэтому не обновили, а -2 - это MySql видит, что там такое же значение и обновлять не хочет.
miksoft
Дата: 31.12.2012 01:01:27
Это документированная фича
http://dev.mysql.com/doc/refman/5.1/en/update.html
If you set a column to the value it currently has, MySQL notices this and does not update it.
...
UPDATE returns the number of rows that were actually changed.

Единственный вариант обхода, который приходит в голову - апдейтить в другое значение, а потом опять в нужное. Но это удвоение накладных расходов.
Users
Дата: 31.12.2012 11:49:50
miksoft
Это документированная фича
http://dev.mysql.com/doc/refman/5.1/en/update.html
If you set a column to the value it currently has, MySQL notices this and does not update it.
...
UPDATE returns the number of rows that were actually changed.

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



Да ну, есть второй вариант, делать выборку с такими параметрами по этому id - если не null - тогда апдейт просто не выполнять, а иметь свой код возврата. Но да, накладные расходы вырастут. Потому и спрашиваю - а нет ли какого иного способа понять, почему именно апдейт не выполнился.