我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

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

苏南大叔:如何使用navicat的数据库结构对比同步功能? - navicat-compare
如何使用navicat的数据库结构对比同步功能?(图12-1)

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

确定操作顺序

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

苏南大叔:如何使用navicat的数据库结构对比同步功能? - 001
如何使用navicat的数据库结构对比同步功能?(图12-2)

苏南大叔:如何使用navicat的数据库结构对比同步功能? - 002
如何使用navicat的数据库结构对比同步功能?(图12-3)

苏南大叔:如何使用navicat的数据库结构对比同步功能? - 003
如何使用navicat的数据库结构对比同步功能?(图12-4)

我们的sourceremote,而targetlocal,这个顺序一定不能填错。

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

苏南大叔:如何使用navicat的数据库结构对比同步功能? - 004
如何使用navicat的数据库结构对比同步功能?(图12-5)

苏南大叔:如何使用navicat的数据库结构对比同步功能? - 005
如何使用navicat的数据库结构对比同步功能?(图12-6)

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

确定最终的sql范围

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

苏南大叔:如何使用navicat的数据库结构对比同步功能? - 006
如何使用navicat的数据库结构对比同步功能?(图12-7)

苏南大叔:如何使用navicat的数据库结构对比同步功能? - 007
如何使用navicat的数据库结构对比同步功能?(图12-8)

苏南大叔:如何使用navicat的数据库结构对比同步功能? - 008
如何使用navicat的数据库结构对比同步功能?(图12-9)

这里要注意切换到上图中的Deployment Script选项卡,这里的sql语句,就是最终要执行的升级语句,很容易直观的说明问题,便于你判断是否做对应的升级。

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

查看具体的更新sql语句

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

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

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

苏南大叔:如何使用navicat的数据库结构对比同步功能? - 009
如何使用navicat的数据库结构对比同步功能?(图12-10)

苏南大叔:如何使用navicat的数据库结构对比同步功能? - 010
如何使用navicat的数据库结构对比同步功能?(图12-11)

苏南大叔:如何使用navicat的数据库结构对比同步功能? - 011
如何使用navicat的数据库结构对比同步功能?(图12-12)

最后总结

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

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

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

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

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   navicat    mysql