更新行时自动增加列
Auto Increment column when row is updated
我有一个 MySQL table 结构如下所示。最后一列代表文件的下载次数。每次访问文件时,它的 UUID 都会更改。
Table结构:
+---------+--------------------+--------------+-------------+
| dKey | file_name | file | downloads |
+---------+--------------------+--------------+-------------+
| UUID | file.mp4 | file alias | 0 |
| UUID2 | another_file.mov | file alias | 3 |
+---------+--------------------+--------------+-------------+
我想知道如果行更新,是否有办法增加下载计数。这不是必须的,我可以在更改UUID时更改它,我只是想知道是否有办法做到这一点。
我环顾四周,找不到任何说明如何做或无法完成的内容。
我认为最好的解决方案是在更新后创建一个 trigger.Within 触发器 您可以相应地更新计数。
您可以使用 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
.
我有一个 MySQL table 结构如下所示。最后一列代表文件的下载次数。每次访问文件时,它的 UUID 都会更改。
Table结构:
+---------+--------------------+--------------+-------------+
| dKey | file_name | file | downloads |
+---------+--------------------+--------------+-------------+
| UUID | file.mp4 | file alias | 0 |
| UUID2 | another_file.mov | file alias | 3 |
+---------+--------------------+--------------+-------------+
我想知道如果行更新,是否有办法增加下载计数。这不是必须的,我可以在更改UUID时更改它,我只是想知道是否有办法做到这一点。
我环顾四周,找不到任何说明如何做或无法完成的内容。
我认为最好的解决方案是在更新后创建一个 trigger.Within 触发器 您可以相应地更新计数。
您可以使用 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
.