1.动态创建多张表存储过程:
创建16张表,从score_stream_00到score_stream_15
DELIMITER $$
CREATE
PROCEDURE `score`.`p`()
BEGIN
DECLARE i INT;
DECLARE table_name VARCHAR(20);
DECLARE table_pre VARCHAR(20);
DECLARE sql_text VARCHAR(2000);
SET i=1;
SET table_name='';
SET table_pre='score_stream_';
SET sql_text='';
WHILE i<16 DO
IF i<10 THEN SET table_name=CONCAT(table_pre,'0',i);
ELSE SET table_name=CONCAT(table_pre,i);
END IF;
SET sql_text=CONCAT('CREATE TABLE ', table_name, '(
id VARCHAR(32) NOT NULL COMMENT \'主键\',
user_id VARCHAR(32) NOT NULL COMMENT \'用户ID\',
direction VARCHAR(8) NOT NULL COMMENT \'收支方向 收入-IN 支出-OUT\',
operate_score INT(11) NOT NULL COMMENT \'操作的积分数\',
operator VARCHAR(32) NOT NULL COMMENT \'操作人:如果是系统,则为system\',
operate_time DATETIME NOT NULL COMMENT \'操作时间,首次生成积分流水的操作时间,用来排序显示\',
score_status INT(4) NOT NULL',
score_rule_id VARCHAR(32) DEFAULT NULL COMMENT \'积分规则ID\',
member_level INT(4) DEFAULT NULL COMMENT \'会员等级1:普通会员,2:VIP会员\',
score_type INT(4) NOT NULL COMMENT \'获取积分的类型,和score_task表中的score_type一个含义\',
product_id VARCHAR(32) DEFAULT NULL COMMENT \'产品ID\',
remark VARCHAR(256) DEFAULT NULL COMMENT \'积分流水的备注(用来给内部人看的)\',
operate_source INT(4) DEFAULT NULL COMMENT \'操作来源:1:系统操作触发,2:人工操作触发\',
gmt_modify DATETIME NOT NULL COMMENT \'表改修时间\',
gmt_create DATETIME NOT NULL COMMENT \'表创建时间\',
PRIMARY KEY (id),
KEY idx_user_id (user_id),
KEY idx_direction (direction),
KEY idx_operate_time (operate_time),
KEY idx_score_status (score_status)
) ENGINE=INNODB DEFAULT CHARSET=utf8' );
SELECT sql_text;
SET @sql_text=sql_text;
PREPARE stmt FROM @sql_text;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET i=i+1;
END WHILE;
END$$
DELIMITER ;
2.执行存储过程,创建表
CALL p();