MySql 개발 의 자동 동기 화 테이블 구조

개발 통점
개발 과정 에서 데이터베이스 필드 를 자주 수정 하기 때문에 rd 와 qa 환경의 데이터베이스 테이블 은 항상 일치 하지 않 습 니 다.
이러한 수정 데이터 베 이 스 는 여러 rd 로 작 동 할 수 있 기 때문에 한꺼번에 수집 하기 어렵다.사람 이 손 으로 가서 qa 환경 과 필드 에 대해 특히 번 거 롭 고 빠 지기 쉽다.
해결 의 길
그래서 필 자 는 두 개의 데이터 베 이 스 를 자동 으로 비교 할 수 있 는 표 구 조 를 쓰 고 alter 문 구 를 생 성 하 는 프로그램 을 썼 다.이 alter 문 구 를 자동 으로 설정 할 수 있 습 니 다.자세 한 내용 은 github 참조
의 원리
새로 추 가 된 시계 동기 화
rd 환경 에 추 가 된 표 가 있 고 qa 환경 이 없 으 면 이 프로그램 은 create table 문 구 를 직접 출력 할 수 있 습 니 다.원 리 는 다음 과 같다.

사용 하 는 sql 은 주로:

show table from rd_db;
show create table added_table_name;
동기 표 구조
만약 에 rd 표 구조 가 바 뀌 었 고 qa 환경 이 없 으 면 이 프로그램 은 alter 문 구 를 직접 출력 할 수 있 습 니 다.원 리 는 다음 과 같 습 니 다.

사용 하 는 sql 은:

select 
 COLUMN_NAME,COLUMN_TYPE,IS_NULLABLE,COLUMN_DEFAULT,COLUMN_COMMENT,EXTRA 
from 
 information_schema.columns
where 
  TABLE_SCHEMA='rd_db'
  and TABLE_NAME = 'rd_table';
표 구조의 코드 비교:

        for (Column column : sourceTable.getColumns().values()) {
            if (targetTable.getColumns().get(column.getName()) == null) {
                //      target      ,  alter
                String sql = "alter table " + target.getSchema() + "." + targetTable.getTableName() + " add " + column
                        .getName() + " ";
                sql += column.getType() + " ";
                if (column.getIsNull().equals("NO")) {
                    sql += "NOT NULL ";
                } else {
                    sql += "NULL ";
                }
                if (column.getDefaultValue() != null) {
                    sql += "DEFAULT " + SqlUtil.getDbString(column.getDefaultValue()) + " ";
                }
                if (column.getComment() != null) {
                    sql += "COMMENT " + SqlUtil.getDbString(column.getComment()) + " ";
                }
                if (after != null) {
                    sql += "after " + after;
                }
                changeSql.add(sql+";");
            } else {
                //      source   target   
                String sql =
                        "alter table " + target.getSchema() + "." + targetTable.getTableName() + " change " + column
                                .getName() + " ";
                Column sourceColumn = column;
                Column targetColumn = targetTable.getColumns().get(sourceColumn.getName());
                //       ,    null,    
                String sqlExtend = compareSingleColumn(sourceColumn, targetColumn);
                if (sqlExtend != null) {
                    changeSql.add(sql + sqlExtend+";");
                }
            }
            after = column.getName();
        }
동기 색인 구조
rd 표 의 색인 이 바 뀌 었 고 qa 환경 이 없 으 면 이 프로그램 은 색인 문 구 를 직접 출력 할 수 있 습 니 다.원 리 는 위 와 유사 하 므 로 여기 서 더 이상 군말 하지 않 겠 다.
배치 하 다.

sourceHost=127.0.0.1:3306
sourceUser=root
sourcePass=123123123
sourceSchema=mystique_db
sourceCharset=utf8

targetHost=127.0.0.1:3306
targetUser=root
targetPass=123123123
targetSchema=mystique_test
targetCharset=utf8

autoExecute=YES //        

운행 하 다.
위 템 플 릿 에 따라 설정 을 하고 IDE 로 열 어서 찾 습 니 다.

alchemystar.runner.ShellRunner 
그 중의 main 방법 을 실행 하면 됩 니 다.
생 성 효과 전시

alter table mystique_test.t_test_3 change id id bigint(20) NOT NULL AUTO_INCREMENT COMMENT ''
alter table mystique_test.t_test_3 add index (name)
alter table mystique_test.t_test_3 drop index name_id
alter table mystique_test.t_test_3 add id_2 varchar(50) NULL DEFAULT '' COMMENT '' after name
자동 실행 을 열 면 이 문 구 를 자동 으로 실행 합 니 다.
github 링크
https://github.com/alchemystar/Lancer
코드 클 라 우 드 링크
https://git.oschina.net/alchemystar/Lancer
총결산
MySql 개발 의 자동 동기 표 구조 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.MySql 자동 동기 표 구조 에 관 한 더 많은 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기