lcpsky

导航

通过存储过程自动创建数据库

起源

  1. 解决进行项目自动化配置
  2. 实现程序化的分表功能,减轻数据库压力

如何实现

  1. 通过在数据库中创建存储过程实现表创建功能
  2. 通过kettle实现数据库脚本的执行
  3. 需要解决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“的形式。

通过kettle脚本进行存储过程或sql脚本调用

posted on 2021-08-28 22:27  lcpsky  阅读(94)  评论(0编辑  收藏  举报