1.表结构使用的是联合主键:key1,key2

key1自增

2.目的:将key2替换成表中已经存在的值,由于替换后存在主键冲突。所以。需要将自增字段偏移一定量,进行添加,同时添加完成后修改自增起始量;

DELIMITER $$

USE `database`$$

DROP PROCEDURE IF EXISTS `move`$$

CREATE DEFINER=`root`@`%` PROCEDURE `move`(IN t_name VARCHAR(40),IN pri_name VARCHAR(20))
BEGIN
#查询待迁移表当前最大数 付给 currentRowNum
SET @currentRowNum = 0;
SET @offsetvalue = 1000;
SET @_sql  = '';
SET @sqlStmt = CONCAT('SELECT MAX(',pri_name,')+1 INTO @currentRowNum from ',t_name,';');
    PREPARE stmt1 FROM @sqlStmt;
    EXECUTE stmt1;
#SELECT MAX(pri_name)+1 into @currentRowNum  FROM t_name ;
#currentRowNum +offset当做偏移量
SET @currentRowNum=@currentRowNum + @offsetvalue;

#insert into  select 


SET @sqlinsertSelect = CONCAT('SELECT CONCAT("insert into ",table_name," (",
GROUP_CONCAT(column_name),",citycode) select ",
GROUP_CONCAT(select_column_name),",110100 from ",table_name
," where citycode =110200; ") INTO @_sql FROM 
(SELECT table_name,column_name,CONCAT(column_name,"+",@currentRowNum) AS select_column_name FROM information_schema.`COLUMNS` 
WHERE table_schema = "database"    AND EXTRA="auto_increment" AND table_name = "',t_name,'" UNION ALL
SELECT table_name,GROUP_CONCAT(column_name) AS column_name,GROUP_CONCAT(column_name) AS select_column_name
 FROM information_schema.`COLUMNS` 
WHERE table_schema = "database"   AND column_key!="PRI" AND table_name = "',t_name,'" GROUP BY table_name
) t
GROUP BY t.table_name;');
#select @sqlinsertSelect;

 PREPARE stmt2 FROM @sqlinsertSelect;
    EXECUTE stmt2;




PREPARE STMT3 FROM @_sql;
EXECUTE STMT3 ;

#查询迁移之后表的最大数
PREPARE stmt4 FROM @sqlStmt;
    EXECUTE stmt4;
#修改递增ID

SET @_sql1 = CONCAT('ALTER TABLE ',t_name,' AUTO_INCREMENT= ',  @currentRowNum, ';'); 


 PREPARE STMT5 FROM @_sql1; 
 EXECUTE STMT5 ;
    END$$

DELIMITER ;