【发布时间】:2021-05-31 04:14:08
【问题描述】:
我正在使用 MariaDB 5.2,需要每小时创建一个新列,该列需要一个唯一的名称。我有如下代码,以时间为例:
CREATE EVENT IF NOT EXISTS calculation
ON SCHEDULE EVERY 1 HOUR STARTS '2021-01-01 00:00:00'
DO
SET @stmt := CONCAT('ALTER TABLE myTable ADD myColumn_', CURDATE() + 0, ' SMALLINT(5);');
PREPARE stmt from @stmt;
EXECUTE stmt;
不幸的是@stmt 没有重新计算。它在第一次运行时计算一次。然后在之后的每次迭代中,它将继续使用与以前相同的值。如何让它重新计算?我正在使用 MariaDB 5.2。
还值得一提的是,如果我只是运行:
SET @stmt := CONCAT('ALTER TABLE myTable ADD myColumn_', CURDATE() + 0, ' SMALLINT(5);');
PREPARE stmt from @stmt;
EXECUTE stmt;
.. 然后它第一次工作没有错误(变量仍然不会为以后的迭代重新计算)。但是,一旦我添加了 CREATE EVENT 代码,我就会收到一个错误:“SQL 错误(1064):您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册以获取正确的语法以在附近使用'NULL' 在第 1 行。”我运行它时没有“计算”事件,所以我不明白第一行怎么可能是空的。
【问题讨论】:
-
这是一个非常难以置信的要求。要么规范化你的模式,要么不需要 RDBMS。
标签: mysql variables events mariadb scheduler