行更新时自动增量列

时间:2015-05-15 14:04:17

标签: mysql sql triggers

我有一个MySQL表,其结构如下所示。最后一列表示文件的下载次数。每次访问文件时,都会更改UUID。

表格结构:

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

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

我环顾四周,找不到任何显示如何操作的内容,或者是否无法完成。

2 个答案:

答案 0 :(得分:2)

您可以使用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:

enter image description here

注意:在触发器中,您无法在new.触发器中设置AFTER UPDATE列的值,这就是为什么我的答案被编辑为使用BEFORE

答案 1 :(得分:0)

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

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