Stored procedure loop to create multiple tables and multiple databases

Create all database calls: call create_databases('znke_z_log_', 0, 128);
parameter description:
1. The database prefix to be created
2, the minimum number 
of target database suffixes 3, the maximum number of target database suffixes (total number of databases)

CREATE PROCEDURE `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, LPAD(i, LENGTH(max_num), '0'));
    
      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;

Delete all databases call: call delete_databases('znke_z_log_', 0, 60,3);
parameter description:
1. The database prefix to be deleted
2, the minimum number 
of target database suffixes 3, the maximum number of target database suffixes (total number of databases)

4. The number of digits in the target database

CREATE PROCEDURE `delete_databases`(IN db_pre VARCHAR(20),IN min_num INT,IN max_num INT, IN size 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, LPAD(i, size, '0'));
     
      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;

 Create tables in all databases. Call: CALL create_tables_of_databases('znke_z_log_', 'log' ,'znke_z_log.log' ,0 , 128);
Parameter description:
1. The prefix 
of the target database 2. The table to be created in the target database Name
3. Source database name. Source table name (the principle is copied from the created library, so the designed table structure must be created in the source database first) 
4. The minimum number of target database suffixes is 
5, and the maximum number of target database suffixes ( total number of databases)

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, LPAD(i, LENGTH(max_num), '0'));
      
      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;

Delete all tables in the database Call: CALL delete_tables_of_databases('znke_z_log_', 'log' ,0 , 128, 3);
Parameter description:
1. The prefix 
of the target database 2. The name of the table to be created in the target database 
3. The target database Minimum number of suffixes 
4, maximum number of target database suffixes (total number of databases)

5. The number of digits in the target database number

CREATE PROCEDURE `delete_tables_of_databases`(IN db_pre VARCHAR(20),IN table_name VARCHAR(20),IN min_num INT,IN max_num INT, IN size 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, LPAD(i, size, '0'));
       
      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;

 Create all sub-tables in the database (single database multi-table fragmentation mode) call: call create_tables('test', 'user_', 0 ,128);
parameter description:
1. Target database (create many sub-tables in this database) 
2. The table prefix to be created in the target database 
3, the minimum number 
of target database suffixes 4, the maximum number of target database suffixes (total number of databases)

CREATE PROCEDURE `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, LPAD(i, LENGTH(max_num), '0'));
     
      SET sql_text=CONCAT('CREATE TABLE ',db_name ,'.',table_name, '(
          id VARCHAR(32) NOT NULL,
          user_id VARCHAR(32),
          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;

Delete all sharded tables in the database (single database multi-table sharding mode) call: call delete_tables('test', 'user_', 0 ,128, 3);
Parameter description:
1. Target database (create many shards in this database 2. Table 
prefix to be created in the target database 
3, minimum number 
of target database suffixes 4, maximum number of target database suffixes (total number of databases)

5. The number of digits in the target database number

CREATE PROCEDURE `delete_tables`(IN db_name VARCHAR(20),IN table_pre VARCHAR(20), IN min_num INT,IN max_num INT, IN size 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, LPAD(i, size, '0'));
     
      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;
Drop the table with the specified prefix in the database Call: call Drop_Db_Table('test', 'user_'); Parameter description:

1. Target database
2. Table prefix in the target database  

CREATE PROCEDURE Drop_Db_Table(
  DB_NAME varchar(50), # database name
  TB_PREFIX varchar(150) # table prefix
)
BEGIN
  DECLARE done INT DEFAULT 0; #The flag bit of the cursor
  DECLARE a varchar(260);
  DECLARE cur1 CURSOR FOR SELECT table_name FROM information_schema.TABLES WHERE table_schema=DB_NAME AND table_name LIKE CONCAT(TB_PREFIX, '%');
  DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
  
  OPEN cur1;
    REPEAT
    FETCH cur1 INTO a;
      IF NOT done THEN
        SET @E=concat('DROP TABLE ',DB_NAME,'.',a); # Spell delete command
        PREPARE stmt1 FROM @E;
        EXECUTE stmt1; # execute the command
        DEALLOCATE PREPARE stmt1; #Release the object
      END IF;
    UNTIL done END REPEAT;
  CLOSE cur1;
END;

调用:call merage_branch_table('user', 100, 3); select @m_merage_sql; 

Parameter Description:

1. Table prefixes in the  
target database 2. Maximum number of target database suffixes (total number of databases)

3. The number of digits in the target database

DROP PROCEDURE IF EXISTS `merage_branch_table`;
CREATE PROCEDURE `merage_branch_table`(
    IN     p_table_name   VARCHAR(200),    
    IN     p_branch_size  INT,
    in     p_lpad         INT
)
BEGIN
    DECLARE m_begin_row INT DEFAULT 0;
    SET @m_merage_sql = '';
    WHILE m_begin_row<p_branch_size DO
        IF(m_begin_row=p_branch_size-1)
            THEN SET @m_merage_sql = CONCAT(@m_merage_sql, 'SELECT * FROM ', p_table_name, '_', LPAD(m_begin_row, p_lpad, 0));
            ELSE SET @m_merage_sql = CONCAT(@m_merage_sql, 'SELECT * FROM ', p_table_name, '_', LPAD(m_begin_row, p_lpad, 0),' UNION ALL ');
        END IF;

        SET m_begin_row = m_begin_row+1;
    END WHILE;

    PREPARE main_stmt FROM @m_merage_sql;  
    EXECUTE main_stmt;             
END;

 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=326269292&siteId=291194637