-- 存储过程创建库  分为两条语句删除和创建
DELIMITER $$
USE myplan $$
DROP PROCEDURE IF EXISTS createDBN $$
CREATE PROCEDURE createDBN(IN n INT,IN dbName VARCHAR(100),IN dropSql VARCHAR(255),IN createSql VARCHAR(255))
BEGIN
  DECLARE i INT DEFAULT 0;
  WHILE i<n DO
    SET @tempName = CONCAT(dbName,CONVERT(i,CHAR(10)));
    SET @dropTempSql = REPLACE(dropSql,'${tbTempName}',@tempName);
    SET @dropTempSql2 = @dropTempSql;
    PREPARE dropSTMT FROM @dropTempSql2;
    EXECUTE dropSTMT;
    DEALLOCATE PREPARE dropSTMT;
 
    SET @createTempSql = REPLACE(createSql,'${tbTempName}',@tempName);
    SET @createTempSql2 = @createTempSql;
    PREPARE createSTMT FROM @createTempSql2;
    EXECUTE createSTMT;
    DEALLOCATE PREPARE createSTMT; 
 
    SET i=i+1;
  END WHILE;
END $$
 
SET @dropSql = "DROP DATABASE IF EXISTS ${tbTempName};";
SET @creSql = "CREATE database ${tbTempName} character set=utf8;";
CALL createDBN(5,'tl',@dropSql,@creSql);
 
 
-- 存储过程  批量删除数据库
DELIMITER $$
USE myplan $$
DROP PROCEDURE IF EXISTS delDBN $$
CREATE PROCEDURE delDBN(IN dbName VARCHAR(50),IN startValue INT,IN endValue INT)
BEGIN
  DECLARE i INT DEFAULT 0;
  DECLARE tempName VARCHAR(50);
  SET i = startValue;
  WHILE i<endValue DO
    SET tempName=CONCAT(dbName,CONVERT(i,CHAR(10)));
    SET @exeSql = CONCAT('drop database if exists ',tempName);
    PREPARE exeSTMT FROM @exeSql;
    EXECUTE exeSTMT;
    DEALLOCATE PREPARE exeSTMT;
  SET i=i+1;
  END WHILE;
END $$
 
CALL delDBN('tl',0,5);
 
 
-- 存储过程  批量创建数据库
DELIMITER $$
USE myplan $$
DROP PROCEDURE IF EXISTS createDBN2 $$
CREATE PROCEDURE createDBN2(IN n INT,IN dbName VARCHAR(100))
BEGIN
   DECLARE i INT DEFAULT 0;
   DECLARE tempName VARCHAR(50);
   WHILE i<n DO
      SET tempName = CONCAT(dbName,CAST(i AS CHAR(10)));
      SET @exeDropSql = CONCAT('drop database if exists ',tempName);
      SET @exeCreSql = CONCAT('create database ',tempName,' character set=utf8');
 
      -- 删除
      PREPARE exeDropSTMT FROM @exeDropSql;
      EXECUTE exeDropSTMT;
      DEALLOCATE PREPARE exeDropSTMT;
 
      -- 创建
      PREPARE exeCreSTMT FROM @exeCreSql;
      EXECUTE exeCreSTMT;
      DEALLOCATE PREPARE exeCreSTMT;
 
   SET i=i+1;
   END WHILE;
END $$
 
CALL createDBN2(5,'tl');
 
 
-- 存储过程  批量创建表
DELIMITER $$
USE myplan $$
DROP PROCEDURE IF EXISTS createTabN $$
CREATE PROCEDURE createTabN(IN dbN INT,IN tabN INT,IN dbName VARCHAR(50),IN tabName VARCHAR(50),IN creTabSql VARCHAR(1000))
BEGIN
  DECLARE i INT DEFAULT 0;
  DECLARE j INT DEFAULT 0;
  DECLARE tempName VARCHAR(100);
  WHILE i<dbN DO
     WHILE j<tabN DO
        SET tempName = CONCAT(dbName,CONVERT(i,CHAR(10)),'.',tabName,CAST(j AS CHAR(10)));
        SET @dropTabSql = CONCAT('drop table if exists ',tempName);
        SET @exeSql = REPLACE(creTabSql,'${fullTempName}',tempName);
        -- 删除表      
        PREPARE dropSTMT FROM @dropTabSql;
        EXECUTE dropSTMT;
        DEALLOCATE PREPARE dropSTMT;
 
        -- 创建表
        PREPARE exeSTMT FROM @exeSql;
        EXECUTE exeSTMT;
        DEALLOCATE PREPARE exeSTMT;
 
        SET j=j+1;
     END WHILE;
     SET i=i+1;
     SET j=0;
  END WHILE;
 
END $$
 
SET @tsql="
   create table ${fullTempName}(
      id int not null primary key auto_increment,
      lname varchar(10) 
   ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
";
 
CALL createTabN(5,10,'tl','ll',@tsql);
 
 
-- 存储过程  批量删除表
DELIMITER $$
USE myplan $$
DROP PROCEDURE IF EXISTS delTabN $$
CREATE PROCEDURE delTabN(IN dbN INT,IN tabN INT,IN dbName VARCHAR(50),IN tabName VARCHAR(50))
BEGIN
  DECLARE i INT DEFAULT 0;
  DECLARE j INT DEFAULT 0;
  WHILE i<dbN DO
     WHILE j<tabN DO
       SET @tempName=CONCAT(dbName,CONVERT(i,CHAR(10)),'.',tabName,CAST(j AS CHAR(10)));
       SET @dropSql=CONCAT('drop table if exists ',@tempName);
 
       PREPARE dropSTMT FROM @dropSql;
       EXECUTE dropSTMT;
       DEALLOCATE PREPARE dropSTMT;     
 
       SET j=j+1;
     END WHILE;
     SET j=0;
     SET i=i+1;
  END WHILE;
END $$
 
CALL delTabN(5,10,'tl','ll');
 
 
 
-- 存储过程  批量创建库 创建表
DELIMITER $$
USE myplan $$
DROP PROCEDURE IF EXISTS creDBAndTabN $$
CREATE PROCEDURE creDBAndTabN(IN dbN INT,IN tabN INT,IN dbName VARCHAR(50),IN tabName VARCHAR(50),IN tabSql VARCHAR(500))
BEGIN
   DECLARE i INT DEFAULT 0;
   DECLARE j INT DEFAULT 0;
   WHILE i<dbN DO
      SET @tempDBName = CONCAT(dbName,CAST(i AS CHAR(10)));
      SET @dropDBSql = CONCAT('drop database if exists ',@tempDBName);
      SET @creDBSql = CONCAT('create database ',@tempDBName,' character set=utf8');
 
      -- 删除库
      PREPARE dropDBSTMT FROM @dropDBSql;
      EXECUTE dropDBSTMT;
      DEALLOCATE PREPARE dropDBSTMT;
 
      -- 创建库
      PREPARE creDBSTMT FROM @creDBSql;
      EXECUTE creDBSTMT;
      DEALLOCATE PREPARE creDBSTMT;
 
      -- 创建表
      WHILE j<tabN DO
        SET @tempTabName = CONCAT(dbName,CAST(i AS CHAR(10)),'.',tabName,CAST(j AS CHAR(10)));
        SET @dropTabSql = CONCAT('drop table if exists ',@tempTabName);
        SET @creTabSql = REPLACE(tabSql,'${fullTabName}',@tempTabName);
 
        -- 删除表
        PREPARE dropTabSTMT FROM @dropTabSql;
        EXECUTE dropTabSTMT;
        DEALLOCATE PREPARE dropTabSTMT;
 
        -- 创建表
        PREPARE creTabSTMT FROM @creTabSql;
        EXECUTE creTabSTMT;
        DEALLOCATE PREPARE creTabSTMT;     
 
        SET j=j+1;
      END WHILE;
 
      SET i=i+1;
      SET j=0;
   END WHILE;
END $$
 
SET @tsql="
   create table ${fullTabName}(
      id int not null primary key auto_increment,
      lname varchar(10) 
   ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
";
 
CALL creDBAndTabN(5,10,'tl','ll',@tsql);

mysql存储过程分库分表的更多相关文章

  1. MySQL订单分库分表多维度查询

    转自:http://blog.itpub.net/29254281/viewspace-2086198/ MySQL订单分库分表多维度查询  MySQL分库分表,一般只能按照一个维度进行查询. 以订单 ...

  2. MySQL+MyCat分库分表 读写分离配置

    一. MySQL+MyCat分库分表 1 MyCat简介 java编写的数据库中间件 Mycat运行环境需要JDK. Mycat是中间件.运行在代码应用和MySQL数据库之间的应用. 前身 : cor ...

  3. php面试专题---mysql数据库分库分表

    php面试专题---mysql数据库分库分表 一.总结 一句话总结: 通过数据切分技术将一个大的MySQLServer切分成多个小的MySQLServer,既攻克了写入性能瓶颈问题,同一时候也再一次提 ...

  4. MySQL之分库分表

    MySQL之分库分表(MyCAT实现)   分库分表介绍 随着微服务这种架构的兴起,我们应用从一个完整的大的应用,切分为很多可以独立提供服务的小应用.每个应用都有独立的数据库. 数据的切分分为两种: ...

  5. 使用ShardingSphere-JDBC完成Mysql的分库分表和读写分离

    1. 概述 老话说的好:选择比努力更重要,如果选错了道路,就很难成功. 言归正传,之前我们聊了使用 MyCat 实现Mysql的分库分表和读写分离,MyCat是服务端的代理,使用MyCat的好处显而易 ...

  6. mysql数据库分库分表shardingjdbc

    分库分表理解 分库分表应用于互联网的两个场景;大量数据和高并发,通常策略有两种:垂直分库,水平拆分 垂直拆分:是根据业务将一个库拆分为多个库,将一个表拆分为多个表,例如:将不常用的字段和经常访问的字段 ...

  7. Mysql 之分库分表方案

    Mysql分库分表方案 为什么要分表 当一张表的数据达到几千万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了.分表的目的就在于此,减小数据库的负担,缩短查询时间. mysq ...

  8. mysql的分库分表

    1 什么是分库分表 这里讨论的情况是一台机器上对应一个数据库. 分库的对象是表,分表的对象是行.分库是说把属于同一个模块的相关性很高的表放在同一个数据库中.分表是说把同一个表的的行分成多个子表,把各个 ...

  9. 面试官:说说Mysql数据库分库分表,并且会有哪些问题?

    之前一篇文章已经谈到了数据库集群之主从集群也就是读写分离,也提到了读写分离其实只是分担了访问的压力,但是存储的压力没有解决. 存储的压力说白了就是随着系统的演化,需求的增加,可能表的数量会逐渐增多,比 ...

随机推荐

  1. 【微信小程序】调用wx.request接口需要注意的问题

    写在前面 之前写了一篇<微信小程序实现各种特效实例>,上次的小程序的项目我负责大部分前端后台接口的对接,然后学长帮我改了一些问题.总的来说,收获了不少吧! 现在项目已经完成,还是要陆陆续续 ...

  2. extract-text-webpack-plugin 的使用及安装

    extract-text-webpack-plugin该插件的主要是为了抽离css样式,防止将样式打包在js中引起页面样式加载错乱的现象;首先我先来介绍下这个插件的安装方法: npm install ...

  3. SAP 图标查找及方法

    1. 图标查找 方法一:通过TCODE查找图标对应的图标名称 执行TCODE:ICON 查找图标对应的图标名称 方法二:通过方法一查出图标名称查找对应的图标ID SE11类型池根据方法一查找的ICON ...

  4. Java面向对象 Main函数 静态的应用 单例设计模式

     Java面向对象 Main函数 静态的应用与单例设计模式 知识概要             (1)Main函数的细解 (2)静态的应用,静态变量,静态代码块,静态函数 (3)单例设计模式 1.M ...

  5. WPF 学习笔记 路由事件

    1. 可传递的消息: WPF的UI是由布局组建和控件构成的树形结构,当这棵树上的某个节点激发出某个事件时,程序员可以选择以传统的直接事件模式让响应者来响应之,也可以让这个事件在UI组件树沿着一定的方向 ...

  6. 改变oracle数据库归档模式_译文

    Changing the Database Archiving Mode 改变数据库归档模式. Purpose 目的 This module describes how you can change ...

  7. Javascript常见浏览器兼容问题

    常见浏览器原生javascript兼容性问题主要分为以下几类: 一.Dom 1.获取HTML元素,兼容所有浏览器方法:document.getElementById("id")以I ...

  8. Linux.挖矿.cpuminer方法记录

    挖矿一般都要用高端显卡做矿机, 不是一般人玩得起 这里讲的是一种用CPU来挖矿的方法, 纯玩玩, 不要指望能致富喔 本方法在CentOS和树莓派原生系统上测试通过 先从git下载cpuminer gi ...

  9. Hibternate框架笔记

    Hibernate框架 配置 配置文件: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE h ...

  10. 四、MVC简介

    一.高内聚.低耦合 大学的时候,上过一门叫<软件工程>的课程,课程中讲到了耦合,解耦等相关的词汇,当时很懵懂,不解其意. 耦合:是指两个或两个以上的体系或两种运动形式间通过相互作用而彼此影 ...