通过存储过程自动创建数据库
起源
- 解决进行项目自动化配置
- 实现程序化的分表功能,减轻数据库压力
如何实现
- 通过在数据库中创建存储过程实现表创建功能
- 通过kettle实现数据库脚本的执行
- 需要解决kettle ktr脚本数据源配置问题
建表存储过程实现(适用于MySQL5.6+)
1. 生成分区表
CREATE DEFINER=`root`@`localhost` PROCEDURE `createPartitionTableWithPrimaryKey`(var VARCHAR(2000),var1 VARCHAR(100),f1 VARCHAR(30),f2 VARCHAR(30))
BEGIN
SET @pdd = concat('CREATE table ', var,' select * from ',var1,' where 1=2');
PREPARE stmt1 FROM @pdd;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
SET @pdd3 = concat('ALTER TABLE ', var, ' ADD PRIMARY KEY (',f1,',',f2,')');
PREPARE stmt2 FROM @pdd3;
EXECUTE stmt2;
DEALLOCATE PREPARE stmt2;
END
此存储过程功能是根据一个已知表生成一个新表,可出入表名及主键条件。
2. 拷贝表
CREATE DEFINER=`root`@`localhost` PROCEDURE `copytable`(var VARCHAR(20))
BEGIN
SET @pddl = concat('ALTER TABLE ', var, ' RENAME ', var, DATE_FORMAT(NOW(), '%Y%m'));
PREPARE stmt FROM @pddl;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @pdd2 = concat('CREATE table ', var, ' select * from ', var, DATE_FORMAT(NOW(), '%Y%m where 1=2'));
PREPARE stmt1 FROM @pdd2;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
END
根据传入表名进行表复制,并将表名命名为 “表名202107“的形式。