2017-01-22 107 views
1

假設有一些數值的行。是否可以自動增加或減少值?如何在MySQL中創建一個自動增加值的列

例子:(列名:令牌

Token 
1234 
4567 
9521 

「X」 秒後,它會自動爲:

Token 
1234 + x 
4567 + x 
9521 + x 

有沒有辦法做到這一點?

+2

爲什麼要這麼做? – Strawberry

+0

而不是定期更新數據庫值,爲什麼不按計劃在需要時計算結果? – Nathan

+0

我想創建自動過期的令牌生成器,這就是爲什麼我需要它。 –

回答

1

您可以使用一個觀點,假設你有當令牌創建時間:

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

你不想通過更新數據庫來做到這一點 - 你需要更新所有的每秒行。這不會留下太多的處理能力去做任何事情。

1
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 | 
+----+------------+--------------+------+ 
0

在我的愚見,你可以使用更有效的方法做同樣的事情。但是,如果你嚴格要求的話,你可以使用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

不客氣。嘗試一下,並與我們分享您的結果和想法。 –