有一个项目中,由于存储数据量庞大,单表的数据量在一年内可能累计超过5千万,如果这些数据都存储在一张表中势必会导致性能下降。于是我考虑按日期分表存储数据,将每个月的数据存储在一张表里,这就需要动态创建数据库表。下面为大家介绍使用mysql的存储过程实现动态创建数据表,并且使用存储过程的参数作为表名称。
首先,你可以使用navicat等工具创建好你的表结构,并导出建表语句,以便存储过程代码中使用。
第二,创建存储过程,代码如下:
- CREATE DEFINER=`root`@`localhost` PROCEDURE `bldk_creatTable`(in in_year varchar(20),in in_month varchar(20))
- begin
- set @sql_create_table = concat(
- 'CREATE TABLE IF NOT EXISTS t_dktz_',in_year,'_',in_month,
- "(
- `dktzId` bigint(13) NOT NULL AUTO_INCREMENT COMMENT '贷款台账表id',
- `htbh` varchar(100) NOT NULL DEFAULT '' COMMENT '合同编号(表格原始数据)',
- `jgh` varchar(50) DEFAULT '' COMMENT '机构号(表格原始数据)',
- `jkye` decimal(15,2) NOT NULL DEFAULT '0.00' COMMENT '贷款余额(表格原始数据)',
- PRIMARY KEY (`dktzId`),
- KEY `htbh` (`htbh`)
- ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='贷款台账表';");
- PREPARE sql_create_table FROM @sql_create_table;
- EXECUTE sql_create_table;
- end;
第三,使用如下代码测试存储过程是否能够正确创建数据表:
- call creatTable('2017','01');
之后,就是使用程序代码调用这些存储过程了,建表存储过程的参数大家可以根据需要灵活定义。如果想对表格的增删改查也实现动态控制,可以通过后台代码实现,也可以编写相应的存储过程实现。
文/刘强
来源:http://m.liumain.com/it/sql/285.html
如果给你带来帮助,欢迎微信或支付宝扫一扫,赞一下。