如何在mysql中创建具有随机名称的表?

如何在mysql中创建具有随机名称的表?,mysql,Mysql,我有一个更新表的过程。但是,每次更新表之前,我都需要备份它。因此,通过过程备份表的唯一方法是创建一个表,并将所有信息从一个表插入到另一个表中 所以我需要做的是创建一个带有随机值的表名来区分不同的表。理想的解决方案是“New_Table_Name_TIMESTAMP”,因此将时间戳附加到字符串中 我的问题是如何创建一个名称中添加了时间戳的表 新表格名称201412301044 我试过以下方法 DECLARE new_table varchar(100) DEFAULT ''; SET new_ta

我有一个更新表的过程。但是,每次更新表之前,我都需要备份它。因此,通过过程备份表的唯一方法是创建一个表,并将所有信息从一个表插入到另一个表中

所以我需要做的是创建一个带有随机值的表名来区分不同的表。理想的解决方案是“New_Table_Name_TIMESTAMP”,因此将时间戳附加到字符串中

我的问题是如何创建一个名称中添加了时间戳的表 新表格名称201412301044

我试过以下方法

DECLARE new_table varchar(100) DEFAULT '';
SET new_table = CONCAT('WORKFLOW_BU_', client_id_to_update, '_', unix_timestamp() );    

CREATE TABLE data_import.new_table LIKE development.inventory_engine;
INSERT INTO data_import.new_table
SELECT * FROM development.inventory_engine;
但是它创建了一个名为“new_table”的表名,而不是变量


谢谢

要做到这一点,您必须使用所谓的动态SQL,也称为“服务器端准备的语句”。普通SQL禁止使用变量作为表或列的名称

看这里


听起来是个坏主意,但您可以使用@sql中的
PREPARE语句和
EXECUTE语句这样做

样本表

CREATE table yourTable(id int auto_increment primary key,value varchar(50));
INSERT into yourtable(value) values ('test1'),('test2'),('test3'),('test4');
创建一个以时间戳结尾的表(在示例中,我只记录到小时,如果您希望将时间戳减少到秒,可以将
\u%I\u%s
添加到格式中)

SET @TimeStamp = DATE_FORMAT(NOW(),'%Y_%m_%d_%H');

SET @sql = CONCAT('CREATE table yourTable',@TimeStamp,'(id int auto_increment primary key,value varchar(50))');
PREPARE statement FROM @sql;
EXECUTE statement;

SET @sql = CONCAT('INSERT INTO yourTable',@TimeStamp,'(id,value) SELECT id,value FROM yourTable');
PREPARE statement FROM @sql;
EXECUTE statement;

每次更新时复制整个表似乎是一种非常错误的方式。我需要它来备份,以防出错。+这是一个小表。使用事务或mysqldump可以处理这些情况:为什么不将正在更新的行复制到另一个名为“backup”的表中,并添加一个时间戳列,而不是f复制整个表?我不知道哪些行将被更新。+该表记录了大约10K条记录,因此它非常小。我只想知道如何动态创建一个附加了unix_时间戳的表。明白了。谢谢:)