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

标签 mysql sql mariadb

我想知道当该行点击更新时是否可以自动更新行中的某个数字(+1)。

类似的功能,如新ID记录的自动递增。但取决于行的变化。

Data sample
id ; column1; n_changes
1  ; pedro  ; 1

当我更新表时 set column1 = 'hugo' WHERE id = 1

Data sample
id ; column1; n_changes
1  ; hugo   ; 2

当然,第一个答案可能是 - 将此数字的更新放入查询中,但我有理由尝试在数据库自身上解决它。 我使用的是 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。

关于Mysql更新按行更新数自动计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48852836/

相关文章:

mysql - 尝试将两个表关联在一起

python - MySQL 和 Python 中 3 字节字符的字符串值不正确

mysql - MySQL 中从数组/公式计算出的列

java - 使用 java 代码列出特定 PostgreSQL 数据库中的所有表

c# - 使用 C# 查询 MariaDB 数据库

mysql - 根据特定日期的年龄计算出生日期 [MySQL 或 Perl]

尽管编写了正确的查询,但仍抛出 MySql 语法错误

sql - mysql计数问题

mysql - 查询总是返回1064语法错误

c# - SQL依赖于 MariaDB/MySQL 数据库