我希望每周复制过去一周的所有数据,并将其插入一个表格(表格名称中包含周数)。
使用存储过程可以正常工作:
SET @weekno:=WEEKOFYEAR(NOW());
SET @sql_text = concat('INSERT INTO
archive.data_2017_week_',@weekno,' select * from live.data_archive where
year(time) = 2017 AND week(time) = ',@weekno,'');
PREPARE stmt FROM @sql_text;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
但是,如果我尝试在phpMyAdmin中为此做一个周活动,我会得到MySQL'错误代码:1064'。
是否可以在事件中运行预准备语句?
如果没有,是否有更好的方法可以将每周数据复制到一个表中,其中包含一周中包含的周数?
非常感谢。
答案 0 :(得分:1)
您可以简单地创建一个存储过程,如下面的代码
所示DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `YOUR_PROCEDURE`()
BEGIN
SET @weekno:=WEEKOFYEAR(NOW());
SET @sql_text = concat('INSERT INTO
archive.data_2017_week_',@weekno,' select * from live.data_archive where
year(time) = 2017 AND week(time) = ',@weekno,'');
PREPARE stmt FROM @sql_text;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END$$
DELIMITER ;
然后使用事件调用该过程,如下面的代码所示。
有关它的基础知识,您可以在此处查看MySQL Events and Time Duration。
CREATE EVENT YOUR_EVENT_NAME
ON SCHEDULE EVERY 1 week
DO
CALL YOUR_PROCEDURE();