Mysql按行更新次数更新自动计数

时间:2018-02-18 14:37:52

标签: mysql sql mariadb

我想知道当这一行点击更新时是否可以自动更新行中的某个数字(+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

当然第一个答案可能是 - 将此号码的更新放入查询中,但我有理由尝试在db self上解决它。 我正在使用Mysql 5.6或MariaDB。

2 个答案:

答案 0 :(得分:0)

执行更新时,只需增加n_changes列:

UPDATE table
SET
    column1 = 'hugo',
    n_changes = n_changes + 1
WHERE id = 1;

答案 1 :(得分:0)

对于此类操作,如果您希望自动完成触发,通常建议使用触发器。

但是,这很容易包含在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。