我正在尝试使用 mySQL (mariaDB) 创建一个事件,其中每 1 小时它就会用随机数更新名为“itemRandomize”的列的每一行。我尝试了几件事,但要么得到错误语法,要么得到所需的 super 用户。
SET GLOBAL event_scheduler = ON;
CREATE EVENT main
DO
UPDATE main SET itemRandomize = FLOOR(RAND() * 100000000);
我的老式代码进行了更新(但没有随机化),类似于:
SET GLOBAL event_scheduler = ON;
CREATE EVENT itemupdater
ON SCHEDULE EVERY 1 HOUR STARTS '2013-10-26 06:36:00'
DO
UPDATE items SET shopStockCurrent=shopStockMax;
我还收到一条错误,提示 #1046 - 未选择数据库。 我已经有一段时间没有做过这样的事情了。
最佳答案
让我们解决您的错误消息:
- “需要成为 super 用户”-
事件
需要由特权用户创建。 - “未选择数据库”——然后在
CREATE EVENT
之前执行USE some_db
。 - “语法错误”——让我们看看详细信息。
您可以简单地将 RAND()
存储在 FLOAT
列(仅 4 个字节)中,而不是转换为整数。
您将如何处理随机数?
table 有多大? (任务会在一小时内完成吗?)
如果列 itemRandomize
已建立索引,这可能会加快速度:
ALTER TABLE DROP INDEX itemRandomize;
UPDATE ... SET itemRandomize ...;
ALTER TABLE ADD INDEX(itemRandomize);
我说“可能”是因为在最近的 MySQL 版本中,此类 ALTER
发生了重大变化(加速)。我不知道 MariaDB 是否已经 catch 了。
删除并重新创建索引可能是有益的,因为UPDATE
的成本很高——它必须从索引中删除一个条目并插入一个新条目进入一个新的地方。
关于mysql - 创建一个偶数以使用随机数更新表列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53345686/