mysql表自动同步_MySql之自动同步表结构
mysql表⾃动同步_MySql之⾃动同步表结构
#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
lumns
鄂w
where
TABLE_SCHEMA='rd_db'
and TABLE_NAME = 'rd_table';
⽐较表结构的代码:
for (Column column : Columns().values()) {
if (Columns().Name()) == null) {
重装系统win7旗舰版/
/ 如果对应的target没有这个字段,直接alter
String sql = "alter table " + Schema() + "." + TableName() + " add " + column
.getName() + " ";
sql += Type() + " ";
if (IsNull().equals("NO")) {
sql += "NOT NULL ";
} else {
sql += "NULL ";
}
if (DefaultValue() != null) {
sql += "DEFAULT " + DefaultValue()) + " ";
支付宝快捷支付怎么取消
}
if (Comment() != null) {
什么快递可以寄到国外sql += "COMMENT " + Comment()) + " ";
}
if (after != null) {
sql += "after " + after;
}
changeSql.add(sql+";");
} else {
// 检查对应的source 和 target的属性
String sql =
"alter table " + Schema() + "." + TableName() + " change " + column
.getName() + " ";
Column sourceColumn = column;
Column targetColumn = Columns().Name());
// ⽐较两者字段,如果返回null,表明⼀致
纬线String sqlExtend = compareSingleColumn(sourceColumn, targetColumn);
if (sqlExtend != null) {
changeSql.add(sql + sqlExtend+";");
}
}
after = Name();
}
###同步索引结构 如果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

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。