`
zhaoshijie
  • 浏览: 2261583 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

循环创建多张表 和 多个数据库sql语句(数据库水平分库分表时方便)

 
阅读更多
关键字:循环创建多张表 和 多个数据库sql语句(数据库水平分库分表时方便)
提示:创建库或表时可以用存储过程    删除库或表时也可以用存储过程  方便又省时

---------------------------------创建所有数据库-------------------------------------------
调用:call create_databases('znke_z_log_', 0, 128);
参数说明:
1、要创建的数据库前缀
2、目标数据库后缀最小数 
3、目标数据库后缀最大数(数据库总数量)

CREATE `create_databases`(IN db_pre VARCHAR(20),IN min_num INT,IN max_num INT)
BEGIN
     DECLARE i INT;
     DECLARE db_name VARCHAR(20);
     DECLARE sql_text VARCHAR(2000);
     SET i=min_num;
     SET db_name='';
     SET sql_text='';
     WHILE i<max_num DO
      SET db_name=CONCAT(db_pre,i);
     
      SET sql_text=CONCAT('CREATE DATABASE ', db_name, '' );
     
      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;

---------------------------------删除所有数据库-------------------------------------------
调用:call delete_databases('znke_z_log_', 0, 128);
参数说明:
1、要删除的数据库前缀
2、目标数据库后缀最小数 
3、目标数据库后缀最大数(数据库总数量)

CREATE `delete_databases`(IN db_pre VARCHAR(20),IN min_num INT,IN max_num INT)
BEGIN
     DECLARE i INT;
     DECLARE db_name VARCHAR(20); 
     DECLARE sql_text VARCHAR(2000);
     SET i=min_num;
     SET db_name='';
     SET sql_text='';
     WHILE i<max_num DO
      SET db_name=CONCAT(db_pre,i);
     
      SET sql_text=CONCAT('drop DATABASE ', db_name, '' );
       
      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;


---------------------------------创建所有数据库中的表-------------------------------------------
调用:CALL create_tables_of_databases('znke_z_log_', 'log' ,'znke_z_log.log' ,0 , 128);
参数说明:
1、目标数据库的前缀 
2、要创建到目标数据库中的表名称
3、源数据库名称.源表名称(原理从已创建的库中复制,所以先要在源数据库中创建好设计好的表结构) 
4、目标数据库后缀最小数 
5、目标数据库后缀最大数(数据库总数量)
CREATE PROCEDURE `create_tables_of_databases`(IN db_pre VARCHAR(20),IN table_name VARCHAR(20),IN source_db_and_tableName VARCHAR(30),IN min_num INT,IN max_num INT)
BEGIN
     DECLARE i INT;
     DECLARE db_name VARCHAR(20);
    
     DECLARE sql_text VARCHAR(2000);
     SET i=min_num;
     SET db_name='';
    
     SET sql_text='';
     WHILE i<max_num DO
      SET db_name=CONCAT(db_pre,i);
     
     
      SET sql_text=CONCAT('create table ', db_name , '.' ,table_name ,' like ' ,source_db_and_tableName);
     
      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;
 
 
 
---------------------------------删除所有数据库中的表------------------------------------------- 
调用:CALL delete_tables_of_databases('znke_z_log_', 'log'  ,0 , 128);
参数说明:
1、目标数据库的前缀 
2、要创建到目标数据库中的表名称 
3、目标数据库后缀最小数 
4、目标数据库后缀最大数(数据库总数量)

CREATE PROCEDURE `delete_tables_of_databases`(IN db_pre VARCHAR(20),IN table_name VARCHAR(20),IN min_num INT,IN max_num INT)
BEGIN
     DECLARE i INT;
     DECLARE db_name VARCHAR(20);
    
     DECLARE sql_text VARCHAR(2000);
     SET i=min_num;
     SET db_name='';
    
     SET sql_text='';
     WHILE i<max_num DO
      SET db_name=CONCAT(db_pre,i);
     
     
      SET sql_text=CONCAT('drop table ', db_name , '.' ,table_name);
     
      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;


---------------------------------创建数据库中所有分表(单库多表 分片模式)-------------------------------------------
调用:call create_tables('alibaba_db', 'user_', 0 ,128);
参数说明:
1、目标数据库(在该数据库中建立很多分表) 
2、要创建到目标数据库中的表前缀 
3、目标数据库后缀最小数 
4、目标数据库后缀最大数(数据库总数量)
CREATE `create_tables`(IN db_name VARCHAR(20),IN table_pre VARCHAR(20), IN min_num INT,IN max_num INT)
BEGIN
     DECLARE i INT;
     DECLARE table_name VARCHAR(20);
     DECLARE sql_text VARCHAR(2000);
     SET i=min_num;
     SET table_name='';
     SET sql_text='';
     WHILE i<max_num DO
      SET table_name=CONCAT(table_pre,i);
     
      SET sql_text=CONCAT('CREATE TABLE ',db_name ,'.',table_name, '(
          id VARCHAR(32) NOT NULL,
          user_id VARCHAR(32),
          direction VARCHAR(8) ,
          operate_score INT(11),
          operator VARCHAR(32) ,
          operate_time DATETIME,
          score_status INT(4) ,
          score_rule_id VARCHAR(32) DEFAULT NULL ,
          member_level INT(4) DEFAULT NULL , 
          score_type INT(4) ,
          product_id VARCHAR(32) DEFAULT NULL ,
          remark VARCHAR(256) DEFAULT NULL ,
          operate_source INT(4) DEFAULT NULL ,
          gmt_modify DATETIME NOT NULL,
          gmt_create DATETIME NOT NULL,
          PRIMARY KEY (id)
        ) 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;

 
---------------------------------删除数据库中所有分表(单库多表 分片模式)-------------------------------------------
调用:call delete_tables('alibaba_db', 'user_', 0 ,128);
参数说明:
1、目标数据库(在该数据库中建立很多分表) 
2、要创建到目标数据库中的表前缀 
3、目标数据库后缀最小数 
4、目标数据库后缀最大数(数据库总数量)
CREATE `delete_tables`(IN db_name VARCHAR(20),IN table_pre VARCHAR(20), IN min_num INT,IN max_num INT)
BEGIN
     DECLARE i INT;
     DECLARE table_name VARCHAR(20);
     DECLARE sql_text VARCHAR(2000);
     SET i=min_num;
     SET table_name='';
     SET sql_text='';
     WHILE i<max_num DO
      SET table_name=CONCAT(table_pre,i);
     
      SET sql_text=CONCAT('drop table ', db_name , '.' ,table_name);
       
      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;
 
 
----------------------靓丽的分割线 结束---------------------------------------


============靓丽的分割线  以下为老版本 不可以动态传参数 仅供参考==============
-----------------------------MySQL动态创建多张表-----------------------------------------------
说明:1、修改SET table_pre='score_stream_' 为你需要的数据库名称前缀
  2、修改SET i=1 为你需要开始的数量后缀(最小后缀)
  3、修改WHILE i<16 为你最大的数量后缀(最大后缀)
 
call create_tables();

CREATE PROCEDURE `create_tables`()
  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,
          user_id VARCHAR(32),
          direction VARCHAR(8) ,
          operate_score INT(11),
          operator VARCHAR(32) ,
          operate_time DATETIME,
          score_status INT(4) ,
          score_rule_id VARCHAR(32) DEFAULT NULL ,
          member_level INT(4) DEFAULT NULL , 
          score_type INT(4) ,
          product_id VARCHAR(32) DEFAULT NULL ,
          remark VARCHAR(256) DEFAULT NULL ,
          operate_source INT(4) DEFAULT NULL ,
          gmt_modify DATETIME NOT NULL,
          gmt_create DATETIME NOT NULL,
          PRIMARY KEY (id)
        ) 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
 
 
 
 
 
 
 
 
-----------------------------MySQL动态创建多个数据库-----------------------------------------------
说明:1、修改SET table_pre='score_stream_' 为你需要的数据库名称前缀
  2、修改SET i=1 为你需要开始的数量后缀(最小后缀)
  3、修改WHILE i<16 为你最大的数量后缀(最大后缀)
call create_databases();

CREATE PROCEDURE `create_databases`()
  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 DATABASE ', table_name, '' );
       
      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


-----------------------------MySQL动态删除多个数据库-----------------------------------------------
说明:具体参数可以根据情况调整
CREATE PROCEDURE `create_databases`()
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 DATABASE ', table_name, '' );
       
      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;

-----------------------------MySQL动态删除多个数据表-----------------------------------------------
CREATE PROCEDURE `delete_tables`()
BEGIN
     DECLARE i INT;
     DECLARE table_name VARCHAR(20);
     DECLARE table_pre VARCHAR(20);
     DECLARE sql_text VARCHAR(2000);
     SET i=0;
     SET table_name='';
     SET table_pre='score_stream_';
     SET sql_text='';
     WHILE i<1024 DO
      SET table_name=CONCAT(table_pre,i);
     
      SET sql_text=CONCAT('drop TABLE ', table_name, '' );
       
      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;


---------------------------------OK创建所有数据库中的表-------------------------------------------
调用:CALL create_tables_of_databases2('znke_z_log_', 'log' ,'znke_z_log.log' ,0 , 128);
参数说明:1、目标数据库的前缀  2、要创建到目标数据库中的表名称 3、源数据库名称.源表名称  4、目标数据库后缀最小数  5、目标数据库后缀最大数(数据库总数量)
CREATE PROCEDURE `create_tables_of_databases2`(IN db_pre VARCHAR(20),IN table_name VARCHAR(20),IN source_db_and_tableName VARCHAR(30),IN min_num INT,IN max_num INT)
BEGIN
     DECLARE i INT;
     DECLARE db_name VARCHAR(20);
    
     DECLARE sql_text VARCHAR(2000);
     SET i=min_num;
     SET db_name='';
    
     SET sql_text='';
     WHILE i<max_num DO
      SET db_name=CONCAT(db_pre,i);
     
     
      SET sql_text=CONCAT('create table ', db_name , '.' ,table_name ,' like ' ,source_db_and_tableName);
     
      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;
 
---------------------------------OK删除所有数据库中的表------------------------------------------- 
调用:CALL delete_tables_of_databases('znke_z_log_', 'log'  ,0 , 128);
参数说明:1、目标数据库的前缀  2、要创建到目标数据库中的表名称  3、目标数据库后缀最小数  4、目标数据库后缀最大数(数据库总数量)

CREATE PROCEDURE `delete_tables_of_databases`(IN db_pre VARCHAR(20),IN table_name VARCHAR(20),IN min_num INT,IN max_num INT)
BEGIN
     DECLARE i INT;
     DECLARE db_name VARCHAR(20);
    
     DECLARE sql_text VARCHAR(2000);
     SET i=min_num;
     SET db_name='';
    
     SET sql_text='';
     WHILE i<max_num DO
      SET db_name=CONCAT(db_pre,i);
     
     
      SET sql_text=CONCAT('drop table ', db_name , '.' ,table_name);
     
      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;
分享到:
评论

相关推荐

    实验4 使用SQL语句创建并管理数据库、数据表

    通过本次实验,我们学习了如何使用SQL语句来创建和管理数据库、数据表,以及如何执行基本的数据操作,如插入、更新、删除等。这些技能对于数据库管理至关重要,可以帮助我们在实际工作中更高效地管理和维护数据库。...

    经典sql语句,关联到四张表,非常经典

    CASE WHEN 语句用于在 SQL 查询中创建条件 (如果...那么...) 语句。它可以用于计算和返回基于某些条件的结果。在例子中,可以看到CASE WHEN 语句用于处理可能为零的情况,避免除以零的错误: ```sql CASE WHEN sbzs ...

    sharding分库分表demo

    在分库分表的场景下,ShardingSphere能够根据预定义的规则将数据分散到多个数据库和表中,以实现水平扩展,提高数据库处理能力。它支持自定义分片策略,例如根据用户ID取模、时间戳范围等方式,使得数据分布均匀,...

    数据分库分表之二叉树分库分表

    数据分库分表是指将原始数据库中的数据分散存储到多个不同的数据库或表中,以此达到提高数据处理能力的目的。分库分表主要有两种形式:水平分库分表和垂直分库分表。本文着重讨论的是水平分库分表,即不改变表结构的...

    数据库建表操作SQL语句大全

    ### 数据库建表操作SQL语句...以上就是关于数据库建表操作的SQL语句大全及解释,涵盖了从创建表、数据的增删改查到表的维护等多个方面。希望这些内容能够帮助新手快速上手SQL语句,并熟练掌握数据库管理的基础技能。

    Sql Server数据库中检查是否存在某张表

     那么sql server数据库中如何判断是否存在某张表呢,如果不存在又如何创建与该表结构相同的新表呢,(如:已知表Log,判断当前月份的表Log_201512是否存在,若不存在,创建之)?其实很简单,只需一条sql语句,...

    Oracle分库分表分区学习日志.docx

    水平切分分为库内分表和分库分表,根据表内数据的逻辑关系,将同一个表按不同的条件分散到多个数据库或多个表中,每个表中只能包含一部分数据。 三、分表与分区的差别 分表是将一张大表的多个字段拆分成几张小表...

    经典的SQL语句,sql备份数据库

    经典SQL语句,sql备份数据库,sql基本入门的语法。

    列车时刻信息数据库SQL文(内含有5张表,可以完整导入数据库中)

    列车时刻信息数据库SQL文(内含有5张表,可以完整导入数据库中) 列车时刻数据库SQL 时刻信息 站站查询 车次查询 站点查询 票价查询

    关联数据库中多张表

    在VC++6.0中利用Access数据库进行编程,可以实现对多张表的数据操作,这在处理复杂业务逻辑时非常常见。本文将详细介绍如何在VC++6.0环境下,利用MFC(Microsoft Foundation Classes)框架与Access数据库交互,实现...

    android SQLite 一个数据库创建多个表

    `onCreate()` 方法会在数据库首次创建时调用,我们在这里编写创建表的SQL语句;`onUpgrade()` 方法会在数据库版本升级时调用,用于处理旧版本到新版本的迁移。 例如,假设我们要创建两个表,一个是`Users`表,另一...

    完整的erp数据库sql,共82张表

    完整的erp数据库sql,共82张表

    Oracle数据库Sql语句详解大全

    在一张或多张表中使用等值或非等值连接 使用外连接查询 自连接查询 第五章 组函数 定义及有效的使用组函数 使用Group By对查询数据分组 使用HAVING子句对分组后的数据进行过滤 第六章 子查询 第七章 数据建模及...

    4-Sharding-JDBC分库分表.pdf

    分库分表的概念、垂直拆分与水平拆分、分片策略和分片算法是Sharding-JDBC中核心的知识点,下面将对这些概念进行详细的解释。 ### 分库分表概念 分库分表是为了解决随着业务数据量的不断增长,单库单表模式面临的...

    数据库数据导出为SQl语句工具,支持各种数据库数据导出

    SQL语句包括但不限于查询、插入、更新和删除数据,以及创建和修改表结构等操作。在本案例中,我们关注的是“插入”语句,因为这些语句可以用来重新构建数据库中的数据。 当需要导出数据库数据为SQL语句时,通常有...

    全国省市区3级 3张表的创建文件,可直接在MSSQL数据库创建生成表。

    在AllData.sql文件中,很可能包含了创建这3张表的SQL语句,以及可能的数据插入语句。这些SQL语句可能是CREATE TABLE语句来定义表结构,以及INSERT INTO语句来填充数据。通过运行这个SQL脚本,用户可以直接在MSSQL...

    kettle对数据分表插入

    总的来说,结合Kettle、Oracle数据库、Java脚本和哈希算法,我们可以构建出一个高效的数据分表插入解决方案,这对于大数据环境下的数据处理和分析具有重要意义。在实际工作中,理解并掌握这些技术,将有助于提升数据...

    数据库SQL查询语句练习题.docx

    ### 数据库SQL查询语句知识点解析 #### 一、数据库基本概念 数据库是长期存储在计算机内、有组织的、可共享的数据集合。SQL(Structured Query Language)是一种用于管理关系数据库的标准语言,它提供了对数据进行...

    Kettle 数据库与数据库多表循环同步

    2.使用前提是来源看与目标库中共同存在的表结构必须一致(因为是简易版,没有添加创建表等); 3.只需更改数据库连接即可,其他参数不必调整;4.目前使用KETTL7.1版本; 5.支持中文表、以及含特殊字符的表名; 6....

    msyql分表sql,导入即可

    2. 逻辑分表:通过中间件或库(如MySQL Proxy、ProxySQL等)实现,它们在应用程序和数据库之间进行路由,使得应用程序看到的是一个逻辑上的大表,而实际操作的是多个物理表。这种方法降低了应用程序的复杂性,但增加...

Global site tag (gtag.js) - Google Analytics