2015-05-15 45 views
2

我有一个MySQL表,其结构如下所示。最后一列代表文件下载的次数。每次访问文件时,都是UUID更改。行更新时自动递增列

表结构:

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

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

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

回答

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


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