Auto每天递增列中的数据



在我的数据库中,一个表有一个包含整数的列,该列需要每天递增,计算从某个日期过去的天数。

我有什么办法可以做到吗?
我知道Auto Increment存在,但我不知道它是否适合这种情况。

我找到了一个使用mysql事件的解决方案,但现在我有语法问题。
PHPMyadmin给了我一个表单来完成。

https://i.stack.imgur.com/WZSVg.jpg



我遇到麻烦了,因为我不知道该往里面放什么信息。

最好的方法是在查询中计算经过的天数,而不是每天更新表。

例如,假设有一个包含idstart_date列的表。

这个查询给出了经过的天数。

SELECT id, 
DATEDIFF(CURDATE(), start_date) elapsed
FROM tbl

这样做比每天换表好,原因如下:

  1. 它总是工作,即使事件没有触发的原因。
  2. 随着表的增长,更新整个表的成本越来越高。
  3. 计算经过天数的计算成本远远小于而不是每天更新的计算成本
  4. 如果你碰巧使用增量备份,更新整个表就会失败。
  5. 避免在数据库中多次表示相同的信息是一种很好的做法。

您还可以向表中添加生成的(虚拟)列或使用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

最新更新