通过存储过程迁移数据:
创建表
CREATE TABLE `test1` (
   `idp` varchar(255) DEFAULT NULL,
   `brandIdp` varchar(255) DEFAULT NULL,
   `namep` varchar(1000) DEFAULT NULL,
   `urlp` varchar(1000) DEFAULT NULL
 ) ENGINE=InnoDB DEFAULT CHARSET=keybcs2;
 INSERT INTO `test1` VALUES ('1001', '3004', 'lili', 'www.baidu.com');
 INSERT INTO `test1` VALUES ('1002', '3005', 'lucy', 'www.baidu.com');
 INSERT INTO `test1` VALUES ('1003', '3004', 'lile', 'www.baidu.com');
CREATE TABLE `test2` (
   `idp` varchar(255) DEFAULT NULL,
   `brandIdp` varchar(255) DEFAULT NULL,
   `namep` varchar(1000) DEFAULT NULL,
   `urlp` varchar(1000) DEFAULT NULL
 ) ENGINE=InnoDB DEFAULT CHARSET=keybcs2;
CREATE TABLE `test3` (
   `idp` varchar(255) DEFAULT NULL,
   `brandIdp` varchar(255) DEFAULT NULL,
   `namep` varchar(1000) DEFAULT NULL
 ) ENGINE=InnoDB DEFAULT CHARSET=keybcs2;
建立存储过程:
drop PROCEDURE IF EXISTS p;
 CREATE PROCEDURE p()
 BEGIN
-- 需要定义接收游标数据的变量
 DECLARE idp VARCHAR(255);
 DECLARE brandIdp VARCHAR(255);
 DECLARE namep VARCHAR(1000);
 DECLARE urlp VARCHAR(1000);
-- 遍历数据结束标志
 DECLARE done INT DEFAULT FALSE;
DECLARE cur CURSOR FOR SELECT
 test1.idp,
 test1.brandIdp,
 test1.namep,
 test1.urlp
 from test1;
-- 将结束标志绑定到游标
 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
-- 打开游标
 OPEN cur;
-- 开始循环
 read_loop: LOOP
-- 提取游标里的数据
 FETCH cur INTO idp,brandIdp,namep,urlp;
-- 声明结束的时候
 IF done THEN
LEAVE read_loop;
END IF;
-- 这里做你想做的循环的事件
 INSERT INTO test2 VALUES (idp,brandIdp,namep,urlp);
 INSERT INTO test3 VALUES (idp,brandIdp,namep);
END LOOP;
-- 关闭游标
 CLOSE cur;
END
执行存储过程
call p

使用存储过程,中间遇到了很多坑
CREATE DEFINER=root@localhostPROCEDUREuser_logs`()
 begin
 – 声明一个标志done, 用来判断游标是否遍历完成
 DECLARE done INT DEFAULT FALSE;
 – 声明一个变量,用来存放从游标中提取的数据
 – 特别注意这里的名字不能与由游标中使用的列明相同,否则得到的数据都是NULL
 DECLARE lid varchar(255) DEFAULT NULL;
 DECLARE lname varchar(255) DEFAULT NULL;
 DECLARE lpid varchar(255) DEFAULT NULL;
 DECLARE lzindex varchar(255) DEFAULT NULL;
 DECLARE listype varchar(50) DEFAULT NULL;
 DECLARE ldescpt varchar(50) DEFAULT null;
 DECLARE lcode varchar(50) DEFAULT NULL;
 DECLARE licon varchar(50) DEFAULT NULL;
 DECLARE lpage varchar(50) DEFAULT NULL;
 DECLARE linsert_time varchar(50) DEFAULT NULL;
 DECLARE lupdate_time varchar(50) DEFAULT NULL;
 – 声明游标对应的 SQL 语句
 DECLARE cur CURSOR FOR select id,name, pid,zindex,istype,descpt,code,icon,page,insert_time,update_time from permission;
 – 在游标循环到最后会将 done 设置为 TRUE
 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
 – 执行查询
 open cur;
 – 遍历游标每一行
 read_loop: LOOP
 – 提取游标里的数据
 FETCH cur INTO lid,lname,lpid,lzindex,listype,ldescpt,lcode,licon,lpage,linsert_time,lupdate_time ;
 – 声明结束的时候
 IF done THEN
 LEAVE read_loop;
 END IF;
 INSERT INTO permissions(id,name, pid,zindex,istype,descpt,code,icon,page,insert_time,update_time) VALUES( lid,lname,lpid,lzindex,listype,ldescpt,lcode,licon,lpage,linsert_time,lupdate_time);
 delete from permission;
 END LOOP;
 – 关闭游标
 CLOSE cur;
end
  


















