我们可以在MySQL的表名中创建一个带有时间戳后缀的表吗
我试图在MySQL中创建一个表,它需要在表名中添加时间戳后缀。我正在尝试使用下面的SQL命令来实现同样的效果 尝试1<代码>创建表somename-NOW()(id integer,title varchar(100))代码> 尝试2<代码>创建表somename-@NOW()(id integer,title varchar(100))代码> 上述命令对我不起作用 谢谢你使用同样的方法 注意:使用我们可以在MySQL的表名中创建一个带有时间戳后缀的表吗,mysql,sql,Mysql,Sql,我试图在MySQL中创建一个表,它需要在表名中添加时间戳后缀。我正在尝试使用下面的SQL命令来实现同样的效果 尝试1创建表somename-NOW()(id integer,title varchar(100)) 尝试2创建表somename-@NOW()(id integer,title varchar(100)) 上述命令对我不起作用 谢谢你使用同样的方法 注意:使用倒勾确认它是否为有效标识符。另外,如果您只使用NOW()它将返回YYYY-MM-DD HH:ii:ss,日期和时间之间有一个空
倒勾
确认它是否为有效标识符。另外,如果您只使用NOW()
它将返回YYYY-MM-DD HH:ii:ss
,日期和时间之间有一个空格,这对于任何查询都是一个问题,因此您可以使用date\u format
函数以友好的名称格式化它
SET @s:= CONCAT('create table `somename_', DATE_FORMAT(NOW(), '%y_%m_%dt%H_%i_%s'), '` (id integer, title varchar(100))');
PREPARE stmt3 FROM @s;
EXECUTE stmt3;
DEALLOCATE PREPARE stmt3;
用于相同的目的
注意:使用倒勾
确认它是否为有效标识符。另外,如果您只使用NOW()
它将返回YYYY-MM-DD HH:ii:ss
,日期和时间之间有一个空格,这对于任何查询都是一个问题,因此您可以使用date\u format
函数以友好的名称格式化它
SET @s:= CONCAT('create table `somename_', DATE_FORMAT(NOW(), '%y_%m_%dt%H_%i_%s'), '` (id integer, title varchar(100))');
PREPARE stmt3 FROM @s;
EXECUTE stmt3;
DEALLOCATE PREPARE stmt3;
这似乎是个非常糟糕的主意。我建议您在一个表中插入一个附加列:
create table somename (
id integer,
title varchar(100),
loadtime datetime default now(),
key (loadtime, id)
);
然后可以加载到此表中,并使用loadtime
列分隔批次。其他功能,如分区,也可能有帮助。这似乎是一个非常糟糕的主意。我建议您在一个表中插入一个附加列:
create table somename (
id integer,
title varchar(100),
loadtime datetime default now(),
key (loadtime, id)
);
然后可以加载到此表中,并使用
loadtime
列分隔批次。其他功能,如分区,也可能有帮助。您可以使用prepared语句
因为我是在工作台上做这件事的,我只能使用命令,没有代码涉及任何其他内容。标识符名称中的负号无效,除非勾选。我不知道您的用例是什么,但您可能想看看。您想要实现的模式往往很难维护。这听起来是一个非常糟糕的主意。有一种罕见的情况是,我复制了一张带有时间戳的表格进行分析。但是,这些表通常不是在生产环境中创建的,也不是定期创建的。您可以使用prepared语句
,因为我是在工作台上创建的,我只能使用命令,没有代码涉及任何其他内容。标识符名称中的负号无效,除非勾选。我不知道您的用例是什么,但您可能想看看。您想要实现的模式往往很难维护。这听起来是一个非常糟糕的主意。有一种罕见的情况是,我复制了一张带有时间戳的表格进行分析。但是,这些表通常不是在生产环境中创建的,也不是定期创建的。是的,但我们有一个这样做的用例,但是您的看起来很完美,完全有意义。是的,确实有一个这样做的用例,但是您的看起来很完美,完全有意义。