Py学习  »  DATABASE

MySQL强制变量重新计算

Normajean • 3 年前 • 1020 次点击  

我使用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
 
1020 次点击  
文章 [ 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);')