社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

MySQL强制变量重新计算

Normajean • 3 年前 • 1023 次点击  

我使用MySQL的事件调度器定期执行代码,即每天或每小时。在我的代码中,我使用“CURDATE()”并将其分配给一个变量。不幸的是,MySQL只在第一个实例中计算。它不会在每次迭代中重新计算它,这意味着第一次通过它时会有正确的日期,但之后每次都会有错误的日期。如果我手动运行代码(即不使用事件调度器),也会发生同样的情况。

如何强制MySQL重新计算变量?

我试过这个(这只第一次有效):

SET @stmt := CONCAT('ALTER TABLE myTable ADD myColum_', DATE_FORMAT(NOW(), '%Y_%M_%D_%H_%m'), ' SMALLINT(5);');
PREPARE stmt from @stmt;
EXECUTE stmt;

还有这个(这个第一次都不管用):

PREPARE stmt from ALTER TABLE myTable ADD
CONCAT('myColumn_', DATE_FORMAT(NOW(), '%Y_%M_%D_%H_%mm'), '
SMALLINT(5);'); EXECUTE stmt;
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/131596
 
1023 次点击  
文章 [ 1 ]  |  最新文章 3 年前
danblack
Reply   •   1 楼
danblack    3 年前

所以你有两个问题 NOW() 返回连接开始时的时间,无论执行了多少条语句。 CURDATE()

中的语法 ALTER TABLE 不能接受任意表达式。

你能做的就是使用 EXECUTE IMMEDIATE :

EXECUTE IMMEDIATE
  CONCAT('ALTER TABLE myTable ADD myColum_',
         DATE_FORMAT(CURDATE(), '%Y_%M_%D_%H_%m'),
         ' SMALLINT(5);')