在我的数据库中,一个表有一个包含整数的列,该列需要每天递增,计算从某个日期过去的天数。
我有什么办法可以做到吗?
我知道Auto Increment存在,但我不知道它是否适合这种情况。
我找到了一个使用mysql事件的解决方案,但现在我有语法问题。
PHPMyadmin给了我一个表单来完成。
https://i.stack.imgur.com/WZSVg.jpg
我遇到麻烦了,因为我不知道该往里面放什么信息。
最好的方法是在查询中计算经过的天数,而不是每天更新表。
例如,假设有一个包含id
和start_date
列的表。
这个查询给出了经过的天数。
SELECT id,
DATEDIFF(CURDATE(), start_date) elapsed
FROM tbl
这样做比每天换表好,原因如下:
- 它总是工作,即使事件没有触发的原因。
- 随着表的增长,更新整个表的成本越来越高。
- 计算经过天数的计算成本远远小于而不是每天更新的计算成本
- 如果你碰巧使用增量备份,更新整个表就会失败。 避免在数据库中多次表示相同的信息是一种很好的做法。
您还可以向表中添加生成的(虚拟)列或使用VIEW。
你应该看看MySQL中的事件调度程序,你可以使用它们来运行一个作业,每天增加一次你的值。
MySQL事件调度程序
下面的示例创建一个循环事件,用于更新表中的一行。
首先,创建一个名为counter的新表。
CREATE TABLE counter (
id INT PRIMARY KEY AUTO_INCREMENT,
counts VARCHAR(255) NOT NULL,
created_at DATETIME NOT NULL
);
其次,使用create event语句创建一个事件:
CREATE EVENT IF NOT EXISTS count_event
ON SCHEDULE AT EVERY interval STARTS timestamp [+INTERVAL] ENDS timestamp [+INTERVAL]
DO
UPDATE counter SET counts = counts + YOUR_COUNT WHERE id = YOUR_ID;
用真实变量替换间隔时间戳、your_count和your_id