MySQL 动态sql语句运行 用时间做表名

Posted mfmdaoyou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL 动态sql语句运行 用时间做表名相关的知识,希望对你有一定的参考价值。

1. 描写叙述

  在使用数据的时候,我时候我们须要非常多数据库,并且想用时间来做表名以区分。可是mysql在存储过程中不支持使用变量名来做表名或者列名。


  比方,有一个表我们想以“2015-07-16 12:00:00”命名。


2. 解决方式

  假设仅仅是更换一个普通的表名的话,非常easy。直接使用以下sql语句就可以:
  alter table old_table_name rename new_table_name
  可是要以时间为表名,动态命名的话就不能够了。首先我们能够用NOW()函数获取系统当前的时间。要寻求支持动态以变量的形式做数据库操作的方法,在MySQL5.1以上的版本号中。prepare语句能够支持这种操作。


  我们能够用set @var=...设置变量,然后用prepare stml from @var设置动态sql语句,最后用EXECUTE stml;运行语句。
  以下是以时间为表名。动态改动一个表的sql运行过程:
  

set @asql=concat(‘alter table old_table_name rename `‘,NOW(),‘`‘);
prepare stml from @asql;
EXECUTE stml;

  这里使用到了MySQL中concat函数,此函数的作用是字符串拼接。相信懂得编程的同学对此都不陌生。
  用法:
  concat(str1,str2,…)

  返回结果为连接參数产生的字符串。注意如有不论什么一个參数为NULL ,则返回值为 NUL。
  附一张结运行果图:
  技术分享











以上是关于MySQL 动态sql语句运行 用时间做表名的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL 语句中的动态表名 (Google Cloud SQL)

mysql变量做表名,附架构师必备技术详解

语句有动态表名时如何防止SQL注入?

语句有动态表名时如何防止SQL注入?

分析sql语句所有表名及其别名的正则表达式

在sql语句中,怎样将参数做为表名传递到查询语句中