mysql convertDBColumn
배경
- 처음 개발을 시작할때 새로운 기능을 만들때 table을 새로 만들었다,
- 시스템에 기능이 추가되면서 사업지역의 사용이 늘어났음
문제
- 사업지역명의 데이터를 한글로 받음
- 같은 사업지역명 데이터를 sharings 와 companies 테이블에서 다른 컬럼명으로 사용하고 있다.
- sharings 는 business_area로 지역데이터를 보관
- companies 는 business_region로 지역 데이터를 보관
1 business_region table생성
CREATE TABLE IF NOT EXISTS `business_region` (
`id` INT NOT NULL AUTO_INCREMENT,
`type` VARCHAR(50) NOT NULL COMMENT '기관 id',
`key` VARCHAR(50) NOT NULL COMMENT '지역 key',
`value` VARCHAR(50) NOT NULL COMMENT '지역명',
PRIMARY KEY (`id`),
KEY `idx_compaies_business_region_key` (`key`)
);
2 sharings 와 companies 테이블에서 사업지역명 통일
- sharings 는 business_area로 지역데이터를 보관
- companies 는 business_region로 지역 데이터를 보관
이슈 sharings 의 컬럼을 business_area로 변경하고 사용하는 데이터를 찾아 변경
ALTER TABLE sharings RENAME COLUMN business_area TO business_region;
신청 내역에서 사용되는 부분을 변경
3 business_region 테이블에서 사업지역명 key값 정의
A01 전국A02 서울특별시A03 부산광역시A04 인천광역시A05 대구광역시A06 광주광역시A07 대전광역시
insert into (`type`,`key`,`value`)values("area","A01" ,"전국"),("area","A02" ,"서울특별시"),("area","A03" ,"부산광역시"),("area","A04" ,"인천광역시"),("area","A05" ,"대구광역시"),("area","A06" ,"광주광역시"),("area","A07" ,"대전광역시");
4.기존데이터 변경
sharings 의 business_region 값이 전국인 경우를 찾아서 값을 A01으로 변경한다
UPDATE sharings SET business_region = '전국' WHERE business_region = A01;
그룹으로https://stackoverflow.com/questions/12754470/mysql-update-case-when-then-else
UPDATE sharings SET business_region = CASE WHEN business_region ="전국" THEN "A01" WHEN business_region ="서울특별시" THEN "A02" WHEN business_region ="부산광역시" THEN "A03" WHEN business_region ="인천광역시" THEN "A04" WHEN business_region ="대구광역시" THEN "A05" WHEN business_region ="광주광역시" THEN "A06" WHEN business_region ="대전광역시" THEN "A07" ENDWHERE business_region in ("전국" ,"서울특별시" ,"부산광역시" ,"인천광역시" ,"대구광역시" ,"광주광역시" ,"대전광역시" )
companies 의 business_region 값이 서울특별시 인 경우를 찾아서 값을 A01으로 변경한다