mysql - 创建一个偶数以使用随机数更新表列

标签 mysql events mariadb

我正在尝试使用 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/

相关文章:

mysql - SQL:根据两列的串联获取唯一行

list - Flex4列表项双击事件

转换时区选择过滤器之间的Mysql

python - "Truncated incorrect DOUBLE value: X_XX"

mysql - 如何为现有表中的列添加索引?

javascript - 在 php 中使用不同的 mysql 在循环中循环

javascript - CSS 或 Javascript 禁用 CTRL + A 中的文本选择突出显示

MYSQL - 执行过程从表中执行语句

mysql - 给定表有3000万条记录,如何检查另一个表中是否存在id?

javascript - Angular : What is the best way to bind to a global event in a directive