当前位置:网站首页>使用Navicat对比多环境数据库数据差异和结构差异,以及自动DML和DDL脚本
使用Navicat对比多环境数据库数据差异和结构差异,以及自动DML和DDL脚本
2022-06-25 08:25:00 【ZWZhangYu】
说明
今天在开发项目中在使用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这里提供的使用起来很方便功能也很强大,最重要的没有其他成本,作为目前项目团队所使用的数据库连接工具,可以直接连接各个环境数据库无需额外配置,而且稳定好用。
边栏推荐
- On which platform is it safe to buy shares and open an account? Ask for sharing
- C program termination problem clr20r3 solution
- 3 big questions! Redis cache exceptions and handling scheme summary
- matplotlib matplotlib中决策边界绘制函数plot_decision_boundary和plt.contourf函数详解
- Is it safe to buy stocks and open accounts through the account QR code of the account manager? Want to open an account for stock trading
- When unity released webgl, jsonconvert Serializeobject() conversion failed
- C language: bubble sort
- Notes on key words in the original English work biography of jobs (III) [chapter one]
- 声纹技术(七):声纹技术的未来
- sklearn PolynomialFeatures的具体用法
猜你喜欢

Close a thread

自定义注解之编译时注解(RetentionPolicy.CLASS)

Cazy eight trigrams maze of Chang'an campaign

Explanation of assertions in JMeter

When unity released webgl, jsonconvert Serializeobject() conversion failed

wav文件(波形文件)格式分析与详解

备战2022年金九银十必问的1000道Android面试题及答案整理,彻底解决面试的烦恼

cazy长安战役八卦迷宫

WebGL谷歌提示内存不够(RuntimeError:memory access out of bounds,火狐提示索引超出界限(RuntimeError:index out of bounds)

About i/o -- the relationship between memory and CPU and disk
随机推荐
How to design test cases
UEFI: repair efi/gpt bootloader
atguigu----01-脚手架
【OpenCV】—输入输出XML和YAML文件
备战2022年金九银十必问的1000道Android面试题及答案整理,彻底解决面试的烦恼
《乔布斯传》英文原著重点词汇笔记(六)【 chapter three 】
Matplotlib plt Axis() usage
Where are the hotel enterprises that have been under pressure since the industry has warmed up in spring?
matplotlib matplotlib中plt.axis()用法
Is it safe to buy stocks and open accounts through the account QR code of the account manager? Want to open an account for stock trading
3、 Automatically terminate training
Easyplayer streaming media player plays HLS video. Technical optimization of slow starting speed
flutter 获取顶部状态栏的高度
In Section 5 of bramble pie project practice, Nokia 5110 LCD is used to display Hello World
Socket programming -- poll model
C#程序终止问题CLR20R3解决方法
Is it safe to open a stock account online now?
声纹技术(六):声纹技术的其他应用
CSV parameterization in JMeter
证券开户风险大吗,安全靠谱吗?