晚上down了一个省市县区划xls导入数据库做成表,先对excel做了修改,发现出现了问题,这里需要批量对数据库进行一些修改,例如需要批量修改parentid这种情况对于市的parentid进行修改,采用了本办法,直接批量update

对省市县行政区划表的操作

update sys_area set parent_id='4'   where code like '34%' and sort ='30' 
update sys_area set parent_id='5'   where code like '14%' and sort ='30' 
update sys_area set parent_id='6'   where code like '15%' and sort ='30' 
update sys_area set parent_id='7'   where code like '21%' and sort ='30' 
update sys_area set parent_id='8'   where code like '22%' and sort ='30' 
update sys_area set parent_id='9'   where code like '23%' and sort ='30' 
update sys_area set parent_id='10'   where code like '31%' and sort ='30' 
update sys_area set parent_id='11'   where code like '32%' and sort ='30' 
update sys_area set parent_id='12'   where code like '33%' and sort ='30' 
update sys_area set parent_id='13'   where code like '13%' and sort ='30' 
update sys_area set parent_id='14'   where code like '35%' and sort ='30' 
update sys_area set parent_id='15'   where code like '36%' and sort ='30' 
update sys_area set parent_id='16'   where code like '37%' and sort ='30' 
update sys_area set parent_id='17'   where code like '41%' and sort ='30' 
update sys_area set parent_id='18'   where code like '42%' and sort ='30' 
update sys_area set parent_id='19'   where code like '43%' and sort ='30' 
update sys_area set parent_id='20'   where code like '44%' and sort ='30' 
update sys_area set parent_id='21'   where code like '45%' and sort ='30' 
update sys_area set parent_id='22'   where code like '46%' and sort ='30' 
update sys_area set parent_id='23'   where code like '50%' and sort ='30' 
update sys_area set parent_id='24'   where code like '51%' and sort ='30' 
update sys_area set parent_id='25'   where code like '52%' and sort ='30' 
update sys_area set parent_id='26'   where code like '53%' and sort ='30' 
update sys_area set parent_id='27'   where code like '54%' and sort ='30' 
update sys_area set parent_id='28'   where code like '61%' and sort ='30' 
update sys_area set parent_id='29'   where code like '62%' and sort ='30' 
update sys_area set parent_id='30'   where code like '63%' and sort ='30' 
update sys_area set parent_id='31'   where code like '64%' and sort ='30' 
update sys_area set parent_id='32'   where code like '65%' and sort ='30' 
update sys_area set parent_id='33'   where code like '71%' and sort ='30' 
update sys_area set parent_id='34'   where code like '81%' and sort ='30' 
update sys_area set parent_id='35'   where code like '82%' and sort ='30' 
update sys_area set parent_id='36'   where code like '90%' and sort ='30' 

因为执行次数少数据量不大,所以可以采用,但是发现如果要对区县的parentid进行修改,这样的update次数无法手动复制修改

update sys_area a,(select id from sys_area where sort='30' and code like '4201%') b set a.parent_id=b.id where a.sort='40' and a.code like '4201%'

这种操作只能手动赋值,来批量修改一小部分的数据

update sys_area a,(select id from sys_area where sort='30' and code like '2115%') b set a.parent_id=b.id where a.sort='40' and a.code like '2115%'
select * from sys_area where code like '21%'  


select * from sys_area where sort=40 and code like '21%'
select * from sys_area where sort=20


select distinct left(code,4) from sys_area where sort=40 order by code desc   


最后通过写一个存储过程,用游标来实现了动态sql

BEGIN
declare acc varchar(32);
DECLARE done INT DEFAULT FALSE;
DECLARE My_Cursor CURSOR FOR ( select distinct left(code,4) from sys_area_copy where sort=40 );
DECLARE CONTINUE HANDLER FOR NOT FOUND 
SET done = TRUE;
OPEN My_Cursor;
fetch My_Cursor into acc;
while done do
update sys_area_copy a,(select id from sys_area_copy where sort='30' and code like concat(acc,'%')) b set a.parent_id=b.id where a.sort='40' and a.code like concat(acc,'%');
commit;
fetch My_Cursor into acc; 
END while;
CLOSE My_Cursor;
END

批量修改了对应的parentid 其实这里也可以通过这种办法对市的parentid进行update,这里不做进一步说明


相关文章: