mysql存储过程动态创建表,参数做表名

有一个项目中,由于存储数据量庞大,单表的数据量在一年内可能累计超过5千万,如果这些数据都存储在一张表中势必会导致性能下降。于是我考虑按日期分表存储数据,将每个月的数据存储在一张表里,这就需要动态创建数据库表。下面为大家介绍使用mysql的存储过程实现动态创建数据表,并且使用存储过程的参数作为表名称。

首先,你可以使用navicat等工具创建好你的表结构,并导出建表语句,以便存储过程代码中使用。

第二,创建存储过程,代码如下:

  1. CREATE DEFINER=`root`@`localhost` PROCEDURE `bldk_creatTable`(in in_year varchar(20),in in_month varchar(20))
  2. begin
  3. set @sql_create_table = concat(
  4. 'CREATE TABLE IF NOT EXISTS t_dktz_',in_year,'_',in_month,
  5. "(
  6.   `dktzId` bigint(13) NOT NULL AUTO_INCREMENT COMMENT '贷款台账表id',
  7.   `htbh` varchar(100) NOT NULL DEFAULT '' COMMENT '合同编号(表格原始数据)',
  8.   `jgh` varchar(50) DEFAULT '' COMMENT '机构号(表格原始数据)',
  9.   `jkye` decimal(15,2) NOT NULL DEFAULT '0.00' COMMENT '贷款余额(表格原始数据)',
  10.   PRIMARY KEY (`dktzId`),
  11.   KEY `htbh` (`htbh`)
  12. ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='贷款台账表';");
  13. PREPARE sql_create_table FROM @sql_create_table;
  14. EXECUTE sql_create_table;
  15. end;

第三,使用如下代码测试存储过程是否能够正确创建数据表:

  1. call creatTable('2017','01');

之后,就是使用程序代码调用这些存储过程了,建表存储过程的参数大家可以根据需要灵活定义。如果想对表格的增删改查也实现动态控制,可以通过后台代码实现,也可以编写相应的存储过程实现。

文/刘强

来源:http://m.liumain.com/it/sql/285.html

 


如果给你带来帮助,欢迎微信或支付宝扫一扫,赞一下。