Мне интересно, возможно ли автоматическое обновление некоторого числа (+1) в строке, когда эта строка попадает в обновление.
Аналогичная функция, например, автоинкремент новой записи ID. Но в зависимости от изменений строк.
Data sample
id ; column1; n_changes
1 ; pedro ; 1
И когда я update table set column1 = 'hugo' WHERE id = 1
Data sample
id ; column1; n_changes
1 ; hugo ; 2
Конечно, первый ответ coul'd be-put update этого числа в запрос, но у меня есть причина попробовать его решить на db self. Я использую Mysql 5.6 или MariaDB.
Для этого типа действия триггер обычно рекомендуется, если вы хотите, чтобы он выполнялся автоматически.
Однако это легко включить в само update
:
update table
set column1 = 'hugo',
n_changes = n_changes + 1
where id = 1 and column1 <> 'hugo';
Обратите внимание на включение column1 <> 'hugo'
в where
. MySQL фактически не обновил бы запись, если значение не изменится. Я предполагаю, что если значение остается неизменным, вы также не хотите увеличивать счетчик.
РЕДАКТИРОВАТЬ:
Триггер довольно прост:
DELIMITER $$
CREATE TRIGGER ins_sum BEFORE UPDATE ON t
FOR EACH ROW
BEGIN
SET new.n_changes = new.n_changes + 1;
END;
DELIMITER ;
Не забудьте сделать n_changes
NOT NULL
со значением по умолчанию 0.
Просто увеличивайте столбец n_changes
при обновлении:
UPDATE table
SET
column1 = 'hugo',
n_changes = n_changes + 1
WHERE id = 1;