如何在MySQL中创建一个自动增加值的列

问题描述:

假设有一些数值的行。是否可以自动增加或减少值?如何在MySQL中创建一个自动增加值的列

例子:(列名:令牌

Token 
1234 
4567 
9521 

“X” 秒后,它会自动为:

Token 
1234 + x 
4567 + x 
9521 + x 

有没有办法做到这一点?

+2

为什么要这么做? – Strawberry

+0

而不是定期更新数据库值,为什么不按计划在需要时计算结果? – Nathan

+0

我想创建自动过期的令牌生成器,这就是为什么我需要它。 –

您可以使用一个观点,假设你有当令牌创建时间:

create view v_t 
    select . . ., 
      (token + timestampdiff(second, tokenCreateTime, now())) as token 
    from t; 

你不想通过更新数据库来做到这一点 - 你需要更新所有的每秒行。这不会留下太多的处理能力去做任何事情。

DROP TABLE IF EXISTS my_table; 

CREATE TABLE my_table 
(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,dt INT NOT NULL, starting_val INT NOT NULL); 

INSERT INTO my_table VALUES (1,UNIX_TIMESTAMP(),1234),(2,UNIX_TIMESTAMP(),4567),(3,UNIX_TIMESTAMP(),9521); 

... 

SELECT *,UNIX_TIMESTAMP()-dt+starting_val x FROM my_table; 
+----+------------+--------------+------+ 
| id | dt   | starting_val | x | 
+----+------------+--------------+------+ 
| 1 | 1485107095 |   1234 | 1284 | 
| 2 | 1485107095 |   4567 | 4617 | 
| 3 | 1485107095 |   9521 | 9571 | 
+----+------------+--------------+------+ 

在我的愚见,你可以使用更有效的方法做同样的事情。但是,如果你严格要求的话,你可以使用MySQL 5.1.6中添加的MySQL的Event Scheduler

CREATE EVENT `updateEverySecond` ON SCHEDULE 
     EVERY 1 SECOND 
    ON COMPLETION NOT PRESERVE 
    ENABLE 
    COMMENT 'Optional comment...' 
    DO 
BEGIN 
UPDATE my_table SET token = token + 1 
END 
+0

谢谢,我会试试它:) :) –

+0

不客气。尝试一下,并与我们分享您的结果和想法。 –