MySql 分表複製表結構和數據腳本

-- 以下是存儲過程
DELIMITER $$ 
DROP PROCEDURE IF EXISTS `spliteOrder` $$ 
CREATE PROCEDURE `spliteOrder` (IN startdate varchar(50),IN enddate varchar(50),IN tabname varchar(100)) 
BEGIN
   
    
    set @repare_time = enddate;
     set @start_time = startdate;
     
     set @month = date_format(now(),'%Y%m');
     
     set @target_tname_crm_order                                 = tabname;
     
     -- 判斷新表是否已存在,如果已存在,則刪除已存在表
     set @sql_drop_table = concat('drop table if exists ',@target_tname_crm_order,'_',@month);
     prepare sql_drop_table from @sql_drop_table;
     execute sql_drop_table;
     
   -- 創建新表
set @sql_create_table = concat('create table ',@target_tname_crm_order,'_',@month,' like ',@target_tname_crm_order); prepare sql_create_table from @sql_create_table; execute sql_create_table; -- 從老表往新表導入數據 set @sql_insert_table = concat('insert into ',@target_tname_crm_order,'_',@month,' select * from ',@target_tname_crm_order," where date_format(repair_time,'%Y-%m-%d')<","'",@repare_time,"'"); prepare sql_insert_table from @sql_insert_table; execute sql_insert_table; -- 插入遷移記錄表 set @sql_insert_table = concat('insert into crm_data_splite(tabName,startDate,endDate,createDate) values(',"'",@target_tname_crm_order,'_',@month,"'",',',"'",@start_time,"'",',',"'",@repare_time,"'",',now())'); prepare sql_insert_table from @sql_insert_table; execute sql_insert_table; -- 刪除當前業務表中被遷移的數據 set @sql_delete_table = concat('delete from ',@target_tname_crm_order," where date_format(repair_time,'%Y-%m-%d')<","'",@repare_time,"'"); prepare sql_delete_table from @sql_delete_table; execute sql_delete_table; END$$ DELIMITER $$;

-- 執行存儲過程

  call spliteOrder('2017-01-01','2017-08-01','crm_order');

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章