iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySql开发之自动同步表结构
  • 732
分享到

MySql开发之自动同步表结构

2024-04-02 19:04:59 732人浏览 安东尼
摘要

开发痛点 在开发过程中,由于频繁的修改数据库的字段,导致rd和qa环境的数据库表经常不一致。 而由于这些修改数据库的操作可能由多个rd操作,很难一次性收集全。人手工去和qa环境对

开发痛点

在开发过程中,由于频繁的修改数据库的字段,导致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自动同步表结构内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: MySql开发之自动同步表结构

本文链接: https://www.lsjlt.com/news/127009.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySql开发之自动同步表结构
    开发痛点 在开发过程中,由于频繁的修改数据库的字段,导致rd和qa环境的数据库表经常不一致。 而由于这些修改数据库的操作可能由多个rd操作,很难一次性收集全。人手工去和qa环境对...
    99+
    2024-04-02
  • mysql表结构同步工具SchemaSync怎么用
    这篇文章将为大家详细讲解有关mysql表结构同步工具SchemaSync怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 SchemaS...
    99+
    2024-04-02
  • 使用datagrip实现不同数据库表之间的结构同步
    datagrip表结构同步 如何把A数据库的结构同步到B数据库 需要将datagrip升级到2022.1及以后版本,可以实现单表的同步 也可以实现数据库所有表的同步 同步单表结构 这里以demo数据库...
    99+
    2023-09-17
    java mysql 数据库
  • Postgresql中的表结构和数据同步/数据传输到Mysql
    场景 Postgresql中的某个表,需要连同表结构以及表数据同步一次到Mysql数据库中。 一种方式是在Postgresql中将表sql导出,然后修改sql文件语法,再导入到mysql中。 但是这种方式过于复杂,可以借助于Navicat等...
    99+
    2023-09-01
    postgresql mysql 数据库
  • python自动化管理mysql主从同步
    mysql多实例1.my.cnf通过定义mysqldconfig类   mysqld_vars = {}  从里面获得很多配置文件相关参数写入字典mysql.py2.init DB初始化数据库3.修改权限4.rc脚本启动5.check 检查...
    99+
    2023-01-31
    主从 python mysql
  • MySQL 拼接Insert批量同步异构表数据
    需求:线上部分表数据需要同步到测试环境,但是测试环境表结构又有变更,额外添加需求:原线上和测试都有的表字段同步,其他不同的字段不用同步,置为NULL即可。 ...
    99+
    2024-04-02
  • web开发中数据结构线性结构链表是怎样的
    这篇文章给大家介绍web开发中数据结构线性结构链表是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、前言我们今天要讲解的 链表 不一样,链表是我们数据结构学习的一个重点,也有可...
    99+
    2024-04-02
  • PHP 并发编程下的数据结构同步机制
    在 php 并发编程中,以下数据结构同步机制至关重要:临界区:使用 synchronized 关键字保护临界区代码区域,一次仅允许一个线程执行;互斥锁:通过 lock() 和 unloc...
    99+
    2024-05-07
    php 并发编程 同步机制
  • SpringBoot开发实战之自动配置
    在介绍SpringBoot的自动配置之前,先了解下注解@Import的使用,SpringBoot的@Enable*开头的注解底层依赖于@Import注解导入一些类,使用@Import...
    99+
    2024-04-02
  • MySQL双机同步自动切换怎么设置
    要实现MySQL双机同步自动切换,可以通过以下步骤进行设置: 配置主从复制:将一台MySQL服务器配置为主服务器,将另一台MyS...
    99+
    2023-10-24
    MySQL
  • Mysql自动处理同步报错代码分享
    本篇内容主要讲解“Mysql自动处理同步报错代码分享”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Mysql自动处理同步报错代码分享”吧!export ...
    99+
    2024-04-02
  • 如何设计一个优化的MySQL表结构来实现数据同步功能?
    如何设计一个优化的MySQL表结构来实现数据同步功能?数据同步是在分布式系统中非常常见的需求,它可以确保多个节点之间的数据一致性。在MySQL中,我们可以通过合理设计表结构来实现数据同步功能。本文将介绍如何设计一个优化的MySQL表结构,并...
    99+
    2023-10-31
  • Ueditor自动排版内容不自动同步到表单中怎么修复
    本篇内容介绍了“Ueditor自动排版内容不自动同步到表单中怎么修复”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Ueditor有自动排版功...
    99+
    2023-06-26
  • 自动迁移时发现结构的无效字段
    问题内容 当我尝试根据我的结构自动迁移表时,出现此错误,我不知道为什么会出现此错误 failed to parse value &models.model{id:0x0, creat...
    99+
    2024-02-12
  • Java数据结构之AC自动机算法的实现
    目录1 概念和原理2 节点定义3 构建Trie前缀树4 构建fail失配指针5 匹配文本6 案例演示7 总结1 概念和原理 一般的字符串匹配算法都是匹配一个子串,例如KMP、Trie...
    99+
    2022-12-08
    Java AC自动机算法 Java AC自动机
  • Android开发之设置开机自动启动的几种方法
    Android开发之设置开机自动启动的几种方法方法一:<!-- 开机启动 --> <receiver android:name=".AutoStartReceiver"> <intent-filter>...
    99+
    2023-05-30
    android 自动启动 roi
  • 如何在 Golang 中拥有具有相同成员但不同 JSON 标签的开发结构和生产结构?
    php小编苹果在Golang开发中,我们经常遇到需要在开发结构和生产结构中使用相同的成员,但却需要不同的JSON标签的情况。这种情况下,我们需要找到一种灵活的解决方案,以便在编写代码时...
    99+
    2024-02-11
    编译错误 golang开发
  • Java数据结构之AC自动机算法如何实现
    本篇内容主要讲解“Java数据结构之AC自动机算法如何实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java数据结构之AC自动机算法如何实现”吧!1 概念和原理一般的字符串匹配算法都是匹配一...
    99+
    2023-07-04
  • 自动监控主从MySQL同步的SHELL脚本分享
    这篇文章主要介绍“自动监控主从MySQL同步的SHELL脚本分享”,在日常操作中,相信很多人在自动监控主从MySQL同步的SHELL脚本分享问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望...
    99+
    2024-04-02
  • Windows11 开机自动同步时间(开机时间不更新问题)
    Windows11 开机自动同步时间 前言解决办法 前言 win11开发版bug多多,开机时间不会自动更新了,我怀疑是电池问题,后来发现是自动更新服务没有开机自启。 解决办法 确保已配置I...
    99+
    2023-09-13
    服务器 运维 linux
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作