使用Navicat对比多环境数据库数据差异和结构差异,以及自动DML和DDL脚本 您所在的位置:网站首页 对比不同表格数据差异 使用Navicat对比多环境数据库数据差异和结构差异,以及自动DML和DDL脚本

使用Navicat对比多环境数据库数据差异和结构差异,以及自动DML和DDL脚本

2024-07-05 07:04| 来源: 网络整理| 查看: 265

文章目录 说明结构同步数据同步小结

说明

今天在开发项目中在使用navicat同步工具时无意中看到数据同步和结构同步有点好奇,于是就简单使用了下,使用过后感觉很适合目前的需求;

【1】不同环境数据库表的差异对比,以及自动生成差异DDL语句 【2】不同环境的数据记录的差异,以及自动生成DML语句 在这里插入图片描述 【数据传输】相信开发人员很熟悉经常使用,而对于【数据同步】【结构同步】之前是没有接触的,其中数据同步主要对比两个数据间对应表的数据差异,结构同步主要对比两个数据库间数据表的差异以及生成SQL脚本。

结构同步

准备两个数据库,然后分别在两个数据库创建一个相同表名的数据表,其中上边的表比下面边的多一个address字段。

CREATE TABLE `t_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `age` int(11) DEFAULT NULL, `address` varchar(255) DEFAULT NULL, `create_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `t_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `age` int(11) DEFAULT NULL, `create_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

选择【工具】【结构对比】,选择t_user表结果如下,通过下面的展示可以很直观的看到差异

在这里插入图片描述 点击【部署脚本】可以看到工具帮我们生成的差异SQL,非常的方便

在这里插入图片描述

数据同步

基于上面的表结构,执行上面生成的DDL语句使两边的数据表保持一致,然后添加如下的测试数据

【源库】 INSERT INTO `t_user`(`id`, `name`, `age`, `address`, `create_time`) VALUES (1, '张三', 25, '安徽合肥', '2022-06-22 15:29:16'); INSERT INTO `t_user`(`id`, `name`, `age`, `address`, `create_time`) VALUES (2, '李四', 25, '合肥', '2022-06-22 15:29:54'); INSERT INTO `t_user`(`id`, `name`, `age`, `address`, `create_time`) VALUES (3, '王五', 25, '合肥', '2022-06-22 15:29:54'); 【目标库】 INSERT INTO `t_user`(`id`, `name`, `age`, `address`, `create_time`) VALUES (1, '张三', 25, '安徽合肥', '2022-06-22 15:29:16'); INSERT INTO `t_user`(`id`, `name`, `age`, `address`, `create_time`) VALUES (3, '王五', 26, '上海', '2022-06-22 15:29:54');

点击【工具】【数据同步】,选择源库和目标库,下图就是本次对比的结果。 在这里插入图片描述 【A】区域展示了经过对比存在不同数据的表的记录,展示了不同的记录数和相同的数量等等。

【B】区域这里可以选择仅展示不同的数据,相同的数据,全部的数据等等,展示的结果在C区域,会以不同的颜色标识。

【C】展示了实际的对比结果,通过上图可以看到两库之间ID为1的数据记录相同,左表多一个ID为2的记录,两表ID为3的记录数据有差异

【D】部署,点击部署会生成差异的SQL,如上例所示,从源库到目标库,会新增一个ID为2的记录,并更新ID为3的记录 在这里插入图片描述 生成的DML如下:

SET FOREIGN_KEY_CHECKS = 0; INSERT INTO `test`.`t_user`(`id`, `name`, `age`, `address`, `create_time`) VALUES (2, '李四', 25, '合肥', '2022-06-22 15:29:54'); UPDATE `test`.`t_user` SET `name` = '王五', `age` = 25, `address` = '合肥', `create_time` = '2022-06-22 15:29:54' WHERE `id` = 3; SET FOREIGN_KEY_CHECKS = 1;

其中:SET FOREIGN_KEY_CHECKS作用:在执行sql脚本时,为了不让外键受影响导致出错。

小结

【1】本次只是简单的测试了数据同步和结构同步的功能,对于这两个功能也是工作中无意接触到的,在了解过后确实感觉对于以后的项目开发中有一定的帮助。 【2】对于其中数据结构同步,在进行版本测试提测时或者大版本升级的时候,如果没有留存升级脚本,可以通过该工具一键快速生成相关的DDL语句。如果准备了升级脚本,也还是可以通过这个工具进行一次源库和目标库的对比,这样可以保证升级时不会有缺失的,做一个保障。

【3】其中数据同步功能可以适用于一些基础表、配置表、字典表等等,如果开发中有人变更了某些数据但是未及时提交,就会导致各环境不一致。此外,对于数据结构的变更一般能够比较及时的提交,但是对于临时修改一些配置数据,基础数据等很可能有遗漏的情况,那么通过这个工具就可以对比差异,并自动生成差异SQL。

【4】在接触到该功能后,我也找了一些类似的产品,比如Liquibase、dbForge Data Compare、以及一些开源的平台。总体的功能差不多,Navicat这里提供的使用起来很方便功能也很强大,最重要的没有其他成本,作为目前项目团队所使用的数据库连接工具,可以直接连接各个环境数据库无需额外配置,而且稳定好用。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有