2015-05-15 67 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