mysql - 创建一个偶数以使用随机数更新表列
问题描述
我正在尝试使用 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 - 未选择数据库。我有一段时间没有做过这种事情了。
解决方案
让我们解决您的错误消息:
- “需要成为超级用户”——
EVENTs
需要由特权用户创建。 - “未选择数据库” - 然后
USE some_db
在CREATE EVENT
. - “语法错误”——让我们看看细节。
RAND()
您可以简单地存储在一FLOAT
列中(只有 4 个字节),而不是转换为整数。
你将如何处理随机数?
桌子有多大?(任务会在一小时内完成吗?)
如果列itemRandomize
被索引,这可能会加快速度:
ALTER TABLE DROP INDEX itemRandomize;
UPDATE ... SET itemRandomize ...;
ALTER TABLE ADD INDEX(itemRandomize);
ALTERs
我说“可能”是因为在最近的 MySQL 版本中这些类型发生了重大变化(加速) 。我不知道 MariaDB 有没有赶上。
删除和重新创建索引可能是有益的原因是因为这样做的成本很高UPDATE
——它必须从索引中删除一个条目并在新位置插入一个新条目。
推荐阅读
- couchdb - 如何在外部链码构建中打包 couchdb 索引?
- flutter - 如何在颤动中保护下载文件
- javascript - 我不能使书籍滑块
- angular - Angular 9如何将上传的json文件读入打字稿中的对象?
- angular - 如何根据数组中的 N 个元素绑定 N 个选择 (*ngFor)
- python-3.x - 如何将数据框的一列变成其他列名的后缀?
- java - CSP 阻止 Websocket 服务器连接
- javascript - 单击链接时从最近的班级中删除班级
- security - 为外部 Kubernetes 集群流量使用自定义源 IP
- flutter - 'tabs' 小部件的高度问题作为其他小部件的子部件,颤动