如何在MySQL中创建一个自动增加值的列
问题描述:
假设有一些数值的行。是否可以自动增加或减少值?如何在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
+0
谢谢,我会试试它:) :) –
+0
不客气。尝试一下,并与我们分享您的结果和想法。 –
为什么要这么做? – Strawberry
而不是定期更新数据库值,为什么不按计划在需要时计算结果? – Nathan
我想创建自动过期的令牌生成器,这就是为什么我需要它。 –