假設有一些數值的行。是否可以自動增加或減少值?如何在MySQL中創建一個自動增加值的列
例子:(列名:令牌)
Token
1234
4567
9521
「X」 秒後,它會自動爲:
Token
1234 + x
4567 + x
9521 + x
有沒有辦法做到這一點?
假設有一些數值的行。是否可以自動增加或減少值?如何在MySQL中創建一個自動增加值的列
例子:(列名:令牌)
Token
1234
4567
9521
「X」 秒後,它會自動爲:
Token
1234 + x
4567 + x
9521 + x
有沒有辦法做到這一點?
您可以使用一個觀點,假設你有當令牌創建時間:
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
謝謝,我會試試它:) :) –
不客氣。嘗試一下,並與我們分享您的結果和想法。 –
爲什麼要這麼做? – Strawberry
而不是定期更新數據庫值,爲什麼不按計劃在需要時計算結果? – Nathan
我想創建自動過期的令牌生成器,這就是爲什麼我需要它。 –