如何使用navicat的数据库结构对比同步功能?
发布于 作者:苏南大叔 来源:程序如此灵动~在各大开源代码中,经常会出现数据库升级的情况。但是由于自己对代码进行过改造,或者开源代码并不提供数据库直接升级的功能的话,数据库结构同步的事情,就变得非常复杂了。在本文中,苏南大叔以目前的cmswing
为例,说明一下navicat
的数据库结构对比功能。该开源代码的网址见文章末尾。
本文的写作环境是mac
,但是win
下面的操作应该都差不多。假设我本地的cmswing
的数据库,我命名为local
,而cmswing
的最新版本的数据库,名为remote
。我们需要把本地的local
升级到最新的remote
。但是本地的数据库里面的数据肯定和远程不一致。并且本地local
里面有自定义的数据表。
确定操作顺序
在navicat
的操作界面上,确定谁先谁后,非常重要。否则,会导致相反的结局。对于本次我们的需求,具体见如下截图。
我们的source
是remote
,而target
是local
,这个顺序一定不能填错。
进行对比,生成初步的sql范围
软件进行对比之后,会出现对应的范围,分别是修改的、删除、添加的。但是这些并不是我们最终的答案,我们需要分别查看这具体的信息。
确定最终的sql范围
对于数据表修改的情况,我们可以打开箭头,查看具体信息。如果字段名都全部相等,而仅仅是最后的tableinfo不相等的话,这样的表,我们可能并不需要更新。 因为可能仅仅是两边的数据不一致罢了。(表现为起始id不一致),否则,我们可能需要更新。
这里要注意切换到上图中的Deployment Script
选项卡,这里的sql
语句,就是最终要执行的升级语句,很容易直观的说明问题,便于你判断是否做对应的升级。
而对于删除的情况,因为local中的新增表是我自定义的,所以,我们并不允许删除。而remote新增的表,我们需要同步到local。基本上就这几条规则,就可以确定这sql的范围了。
查看具体的更新sql语句
在确定好sql范围后,我们点击deploy按钮,就可以看到具体的sql语句了。我们需要把这个语句保存下来,作为最终到服务器上面更新的sql。
注意:在这里的sql文本中,我们需要把所有的 local
. 的字样,替换为空,才能更加适应其他服务器。原因你懂的。
然后我们再点击execute
按钮,就在本地应用这些sql
了,应用的结果是作用在local
上的。当然,在最终的操作界面中,我们还可以使用按钮recompare
再次进行对比。
最后总结
navicat
的数据库结构对比功能,功能非常非常实用,建议大家都掌握这个功能。当然除了结构对比外,还有个结构和数据一同对比的功能,如果您需要,也可以使用。操作流程基本类似。
文中所提及的cmswing的线上地址是: http://www.cmswing.com/ 。是个基于thinkjs(node)的开源cms系统。很新的开源,不过作者很负责,代码写的很好。建议大家学习一下。
本次navicat
操作的数据库是mysql
,您还可以通过下面的链接,继续关注苏南大叔的mysql
相关文章。https://newsn.net/tag/mysql/ 。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。