2015-05-15 2 views
2

У меня есть таблица MySQL со структурой, показанной ниже. В последнем столбце указано количество загрузок файла. При каждом доступе к файлу изменяется UUID.Столбец Auto Increment при обновлении строки

Структура таблицы:

+---------+--------------------+--------------+-------------+ 
| 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; 

EDIT

При создании триггера, возможно, потребуется изменить разделитель, например:

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

I протестировали это в 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.