【问题标题】:Auto Increment column when row is updated更新行时自动增加列
【发布时间】:2015-05-15 14:04:17
【问题描述】:

我有一个 MySQL 表,其结构如下所示。最后一列代表文件的下载次数。每次访问文件时,它的 UUID 都会发生变化。

表结构:

+---------+--------------------+--------------+-------------+
|  dKey   |     file_name      |     file     |  downloads  |
+---------+--------------------+--------------+-------------+
|  UUID   |     file.mp4       |  file alias  |      0      |
|  UUID2  |  another_file.mov  |  file alias  |      3      |
+---------+--------------------+--------------+-------------+

我想知道如果行更新,是否有办法增加下载计数。这不是必需的,我可以在更改 UUID 时更改它,我只是想知道是否有办法做到这一点。

我环顾四周,找不到任何说明如何做到这一点的东西,或者是否无法做到。

【问题讨论】:

    标签: mysql sql triggers


    【解决方案1】:

    您可以使用TRIGGER

    语法看起来像这样:

    CREATE TRIGGER increment_downloads
    BEFORE UPDATE ON myTable
    FOR EACH ROW
    BEGIN
      SET new.downloads = old.downloads + 1
    END;
    

    编辑

    创建触发器时,可能需要更改分隔符,如下所示:

    DELIMITER //
    CREATE TRIGGER increment_downloads
    BEFORE UPDATE ON myTable
    FOR EACH ROW
    BEGIN
      SET new.downloads = old.downloads + 1;
    END;
    //
    DELIMITER ;
    

    我在 MySQL 中测试了这一点,首先插入如下一行:

    INSERT INTO myTable (uuid, downloads) VALUES ('Test', 0);
    

    我是这样更新的:

    UPDATE myTable
    SET uuid = 'Test1'
    WHERE uuid = 'Test';
    

    当我拉行时,下载量等于 1:


    注意:在触发器中,您不能在 AFTER UPDATE 触发器中设置 new. 列的值,这就是我的答案被编辑为使用 BEFORE 的原因。

    【讨论】:

      【解决方案2】:

      我认为最好的解决方案是创建一个更新后触发器。在触发器内您可以相应地更新计数。

      http://www.techonthenet.com/mysql/triggers/after_update.php

      【讨论】:

        猜你喜欢
        • 2018-08-18
        • 2012-03-09
        • 2015-03-21
        • 2016-12-24
        • 2018-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多