晚上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,这里不做进一步说明