我正在尝试使用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-没有选择数据库。我好久没做这种事了。
2条答案
按热度按时间atmip9wb1#
让我们解决您的错误消息:
“需要成为超级用户”-
EVENTs
需要由特权用户创建。“未选择数据库”--然后执行
USE some_db
之前CREATE EVENT
.“语法错误”--让我们看看细节。
您可以简单地存储
RAND()
在一个FLOAT
列(仅4字节)。你要用随机数做什么?
这张table有多大(任务一小时后完成吗?)
如果列
itemRandomize
索引,这可能会加快速度:我说“可能”是因为这类问题已经发生了重大变化(加速)
ALTERs
在最近的mysql版本中。我不知道mariadb是否赶上了。删除并重新创建该指数可能是有益的,原因在于该指数的成本有多高
UPDATE
它必须从索引中删除一个条目,并在新位置插入一个新条目。ncgqoxb02#
rand()-是一个非常慢的函数。尝试这样的事情(对不起,我不检查我的代码):
或者在sql语句中定义db: