首页 > 解决方案 > 创建一个偶数以使用随机数更新表列

问题描述

我正在尝试使用 mySQL (mariaDB) 创建一个事件,它每 1 小时使用随机数更新名为“itemRandomize”的列的每一行。我尝试了几件事,我得到错误语法或需要超级用户。

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 - 未选择数据库。我有一段时间没有做过这种事情了。

标签: mysqleventsmariadb

解决方案


让我们解决您的错误消息:

  • “需要成为超级用户”——EVENTs需要由特权用户创建。
  • “未选择数据库” - 然后USE some_dbCREATE EVENT.
  • “语法错误”——让我们看看细节。

RAND()您可以简单地存储在一FLOAT列中(只有 4 个字节),而不是转换为整数。

你将如何处理随机数?

桌子有多大?(任务会在一小时内完成吗?)

如果列itemRandomize被索引,这可能会加快速度:

ALTER TABLE DROP INDEX itemRandomize;
UPDATE ... SET itemRandomize ...;
ALTER TABLE ADD INDEX(itemRandomize);

ALTERs我说“可能”是因为在最近的 MySQL 版本中这些类型发生了重大变化(加速) 。我不知道 MariaDB 有没有赶上。

删除和重新创建索引可能是有益的原因是因为这样做的成本很高UPDATE——它必须从索引中删除一个条目并在新位置插入一个新条目。


推荐阅读