应用 procedure 批量建表。

有几点大家须要留神:

prepare_stmt 指令只能应用 会话变量 来预筹备 sql,无奈应用 declare 申明的 局部变量
procedure 中的创立的 @会话变量 倡议做清理,防止会话变量净化。SET @foo = NULL; 即可。
DROP PROCEDURE IF EXISTS batchCreateTabPart;DELIMITER $$-- count 批量建表的数量CREATE PROCEDURE batchCreateTabPart(IN count INT UNSIGNED)BEGIN    -- 存储过程局部变量定义    DECLARE i INT UNSIGNED;    DECLARE suffix VARCHAR(8);        -- 局部变量初始化    SET i = 0;    SET suffix = "";        WHILE i < count DO        IF i < 10 THEN            SET suffix = CONCAT("0", i);        ELSE            SET suffix = i;        END IF;                        SET @dropSql = CONCAT('DROP TABLE IF EXISTS `tb_part_', suffix, '`;');        PREPARE stmt FROM @dropSql;        EXECUTE stmt;                -- 拼接创立表 ddl        SET @createSql = CONCAT('CREATE TABLE IF NOT EXISTS `tb_part_', suffix, "`(        `id` bigint UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,        `name` varchar(32) NOT NULL COMMENT '用户名',        `age` tinyint UNSIGNED NOT NULL DEFAULT 0 COMMENT '年龄',        `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,        `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP        )ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='分示意例';");        PREPARE stmt FROM @createSql;        EXECUTE stmt;                            SET i = i + 1;    END WHILE;        -- 删除过程中定义的用户会话变量    SET @dropSql = NULL;    SET @createSql = NULL;END $$DELIMITER ;CALL batchCreateTabPart(100);DROP PROCEDURE IF EXISTS batchCreateTabPart;

tab_part_00
tab_part_01
...
tab_part_10
...
tab_part_99

实现。