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 자동 동기 표 구조 에 관 한 더 많은 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
MySQL에서 JSON 인덱싱 - aarondfrancis사람들은 종종 MySQL로 JSON을 인덱싱할 수 없다고 말하지만 완전히 정확하지는 않습니다. MySQL로 JSON 열을 인덱싱하는 것은 완전히 가능합니다! 사람들은 종종 MySQL로 JSON을 인덱싱할 수 없다고 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.