mysql存储过程分库分表
-- 存储过程创建库 分为两条语句删除和创建
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存储过程分库分表的更多相关文章
- MySQL订单分库分表多维度查询
转自:http://blog.itpub.net/29254281/viewspace-2086198/ MySQL订单分库分表多维度查询 MySQL分库分表,一般只能按照一个维度进行查询. 以订单 ...
- MySQL+MyCat分库分表 读写分离配置
一. MySQL+MyCat分库分表 1 MyCat简介 java编写的数据库中间件 Mycat运行环境需要JDK. Mycat是中间件.运行在代码应用和MySQL数据库之间的应用. 前身 : cor ...
- php面试专题---mysql数据库分库分表
php面试专题---mysql数据库分库分表 一.总结 一句话总结: 通过数据切分技术将一个大的MySQLServer切分成多个小的MySQLServer,既攻克了写入性能瓶颈问题,同一时候也再一次提 ...
- MySQL之分库分表
MySQL之分库分表(MyCAT实现) 分库分表介绍 随着微服务这种架构的兴起,我们应用从一个完整的大的应用,切分为很多可以独立提供服务的小应用.每个应用都有独立的数据库. 数据的切分分为两种: ...
- 使用ShardingSphere-JDBC完成Mysql的分库分表和读写分离
1. 概述 老话说的好:选择比努力更重要,如果选错了道路,就很难成功. 言归正传,之前我们聊了使用 MyCat 实现Mysql的分库分表和读写分离,MyCat是服务端的代理,使用MyCat的好处显而易 ...
- mysql数据库分库分表shardingjdbc
分库分表理解 分库分表应用于互联网的两个场景;大量数据和高并发,通常策略有两种:垂直分库,水平拆分 垂直拆分:是根据业务将一个库拆分为多个库,将一个表拆分为多个表,例如:将不常用的字段和经常访问的字段 ...
- Mysql 之分库分表方案
Mysql分库分表方案 为什么要分表 当一张表的数据达到几千万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了.分表的目的就在于此,减小数据库的负担,缩短查询时间. mysq ...
- mysql的分库分表
1 什么是分库分表 这里讨论的情况是一台机器上对应一个数据库. 分库的对象是表,分表的对象是行.分库是说把属于同一个模块的相关性很高的表放在同一个数据库中.分表是说把同一个表的的行分成多个子表,把各个 ...
- 面试官:说说Mysql数据库分库分表,并且会有哪些问题?
之前一篇文章已经谈到了数据库集群之主从集群也就是读写分离,也提到了读写分离其实只是分担了访问的压力,但是存储的压力没有解决. 存储的压力说白了就是随着系统的演化,需求的增加,可能表的数量会逐渐增多,比 ...
随机推荐
- iOS开发注意事项(一)
1.OC的消息机制与C++等的函数(方法)有很大的不同,OC在运行时所执行的代码由运行环境来决定,而C++等则由编译器决定.如果调用的函数是多态的,C++在运行时要按照虚方法表来查出到底执行哪个函数, ...
- centos 7.3二进制安装mariadb10.2.8完美步骤
(1)在centos7系统上,yum info mariadb可以找到提供mariadb包的官方网站,在到官方网站下载最新的mariadb包,然后rz到linux系统上去 (2)准备用户 1.user ...
- Ubuntu Mac OS主题分享
Ubuntu Mac OS主题分享 一直想搞一个Mac OS主题试试,结果很悲催,在网上搜索的Macbuntu主题在安装主题(macbuntu-os-themes-Its-v7)和 图标(macbun ...
- GeoServer+PostgreSQL+PostGIS+pgRouting实现最短路径查询
一.软件安装 GeoServer下载地址: http://geoserver.org/download/ PostgreSQL下载地址: https://www.postgresql.org/down ...
- win10 uwp smms图床
本文,如何使用smms图床上传图片,用到win10 uwp post文件,因为我是渣渣,如果本文有错的,请和我说,在本文评论,或发给我邮箱lindexi_gd@163.com,请不要发不良言论 找到一 ...
- 使用HTML DOM 来分配事件 —— onmouseover和onmouseout ,onmousedown和onmouseup
一, onmouseover 和 onmouseout 事件 onmouseover 和 onmouseout 事件可用于在用户的鼠标移至 HTML 元素上方或移出元素时触发函数. 一个小例:鼠标未在 ...
- popup方法
popup方法: 一.创建一个页面 1.创建url和视图函数:: from django.shortcuts import render def p1(request): return render( ...
- ArcGIS二次开发AO软件安装破解教程
最近在做ArcGIS二次开发时,采用C#中的WPF技术,在调研中发现ArcGIS 10.3及以上版本支持WPF技术,但是关于ArcGIS10.3的破解教程甚少,自己尝试了不少方法都失败了,淘@宝@商家 ...
- Java运行时内存划分与垃圾回收--以及类加载机制基础
----JVM运行时内存划分----不同的区域存储的内容不同,职责因为不同1.方法区:被线程共享,存储被JVM加载的类的信息,常量,静态变量等2.运行时常量池:属于方法区的一部分,存放编译时期产生的字 ...
- 加载web项目时报的错误:Tomcat version 6.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 Web modul
用eclipse开发的java项目不能加载到tomcat6.0服务器,原因是:jst.web的版本高了 <installed facet="jst.web" version= ...