如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留链接信息。

在各大开源代码中,经常会出现数据库升级的情况。但是由于自己对代码进行过改造,或者开源代码并不提供数据库直接升级的功能的话,数据库结构同步的事情,就变得非常复杂了。今天苏南大叔以目前的新兴 nodejs 的cms开源代码 cmswing 为例,说明一下 navicat 的数据库结构对比功能。该开源代码的网址见文章末尾。

本文的写作环境是mac,但是win下面的操作应该都差不多。假设我本地的 cmswing 的数据库,我命名为 local ,而 cmswing 的最新版本的数据库,名为 remote。我们需要把本地的 local 升级到最新的 remote 。 但是我本地的数据库里面的数据肯定和远程不一致。并且我本地local里面有自定义的数据表。

确定操作顺序

在 navicat 的操作界面上,确定谁先谁后,非常重要。否则,会导致相反的结局。对于本次我们的需求,具体见如下截图。

navicat的数据库结构对比同步功能 - 001

navicat的数据库结构对比同步功能 - 002

navicat的数据库结构对比同步功能 - 003

我们的source是remote,而target是local,这个顺序一定不能填错。

进行对比,生成初步的sql范围

navicat的数据库结构对比同步功能 - 004

navicat的数据库结构对比同步功能 - 005

软件进行对比之后,会出现对应的范围,分别是修改的、删除、添加的。但是这些并不是我们最终的答案,我们需要分别查看这具体的信息。

确定最终的sql范围

对于数据表修改的情况,我们可以打开箭头,查看具体信息。如果字段名都全部相等,而仅仅是最后的tableinfo不相等的话,这样的表,我们可能并不需要更新。 因为可能仅仅是两边的数据不一致罢了。(表现为起始id不一致),否则,我们可能需要更新。

navicat的数据库结构对比同步功能 - 006

navicat的数据库结构对比同步功能 - 007

navicat的数据库结构对比同步功能 - 008

而对于删除的情况,因为local中的新增表是我自定义的,所以,我们并不允许删除。而remote新增的表,我们需要同步到local。基本上就这几条规则,就可以确定这sql的范围了。

查看具体的更新sql语句

在确定好sql范围后,我们点击deploy按钮,就可以看到具体的sql语句了。我们需要把这个语句保存下来,作为最终到服务器上面更新的sql。

注意:在这里的sql文本中,我们需要把所有的 local. 的字样,替换为空,才能更加适应其他服务器。原因你懂的。

然后我们再点击 execute 按钮,就在本地应用这些sql了。当然,在最终的操作界面中,我们还可以使用按钮 recompare 再次进行对比。

navicat的数据库结构对比同步功能 - 009

navicat的数据库结构对比同步功能 - 010

navicat的数据库结构对比同步功能 - 011

最后总结

navicat的数据库结构对比功能,功能非常非常实用,建议大家都掌握这个功能。当然除了结构对比外,还有个结构和数据一同对比的功能,如果您需要,也可以使用。操作流程基本类似。

文中所提及的cmswing的线上地址是: http://www.cmswing.com/ 。是个基于thinkjs(node)的开源cms系统。很新的开源,不过作者很负责,代码写的很好。建议大家学习一下。

本次navicat操作的数据库是mysql,您还可以通过下面的链接,继续关注苏南大叔的mysql相关文章。https://newsn.net/tag/mysql/

本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。