如何根据当前月份和年份创建mysql表名称

时间:2014-07-17 00:08:09

标签: mysql mysql-event

我创建了mysql事件脚本,目的是每个月自动创建mysql表。我希望基于当前月份和年份的表格名称。我该怎么做?

我正在尝试这个:

CREATE DEFINER = `root`@`localhost` EVENT `event_name` 
ON SCHEDULE EVERY 1 MONTH 
ON COMPLETION NOT PRESERVE ENABLE 
DO 
CREATE TABLE IF NOT EXISTS  `currentMonth_currentYear_tableName` (
 `column1` INT( 11 ) NOT NULL ,
 `column2` DATETIME NOT NULL ,
 `column3` DECIMAL( 10, 1 ) NOT NULL ,
  PRIMARY KEY (  `column1` )
) ENGINE = INNODB DEFAULT CHARSET = utf8

2 个答案:

答案 0 :(得分:2)

您不能在SQL中将表达式或变量用作标识符。在准备查询时,标识符名称必须是常量。

要创建一个与您描述的变量表名称,您将使用格式化SQL语句作为字符串,然后使用PREPARE and EXECUTE来运行它。

换句话说,在准备语句之前,表达式或变量必须解析为常量标识符名称​​。

答案 1 :(得分:2)

我没有从事件声明中测试过这个,但它似乎在我的查询浏览器中工作:

SET @SQL = CONCAT('CREATE TABLE IF NOT EXISTS ', DATE_FORMAT(NOW(),'%m_%Y'), '_tableName (
 `column1` INT( 11 ) NOT NULL ,
 `column2` DATETIME NOT NULL ,
 `column3` DECIMAL( 10, 1 ) NOT NULL ,
  PRIMARY KEY (  `column1` )
) ENGINE = INNODB DEFAULT CHARSET = utf8'
);
PREPARE stmt FROM @SQL;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

CONCAT / PREPARE / EXECUTE的想法取自https://dba.stackexchange.com/a/14401