一、背景
Navicat在导入存在多张创建视图语句的sql文件或其他格式文件(都是由Navicat导出生成)时会报XXXX视图不存在的错误,数据库同步和传输也会发生这种错误。
这种错误的本质原因是Navicat导出生成的文件或同步传输里面的对象都是按某种方式排序(好像是按名称吧)造成的 。 当创建某个视图的时候,该视图依赖或调用的视图不存在于目标数据库, 因为这个"不存在"的视图的创建语句排在了当前所创建视图语句的后面。
那么怎么办呢? 有人说调整一下sql语句的顺序, 如果一两张视图改改就算 但是如果是100个视图互相调用那这个方法肯定就不行了 接下来我给大家介绍一下我的方法。
二、方法思路
利用数据库恢复备份文件 向目标数据库导入视图
三、方法原理
我个人的猜测是数据库恢复备份文件时和数据库同步传输或是导入脚本文件的原理不一样 也就是说数据库恢复备份文件不是一句一句的执行sql 所以这个方法可行 具体原理请大神指教 因为我也不懂mysql和Navicat的内部机制与原理 因为该方法可行 所以我给大家分享一下
四、 方法步骤
第一步 在源数据库的“备份”点击鼠标右键 然后点击“新建备份”
(我在这里选择了所有的视图 因为创建视图时 视图中的表必须存在 而我目标数据库又是空的 所以我也选择了表)
选择完以后 然后点击“开始” 备份完成后 你能在备份那里 看到一个以系统时间命名的备份文件 如下图
第二步 将备份的文件恢复到目标数据库 以此来完成 视图导入的先操作
(QQ截图会把右键菜单给关掉 所以我就文字描述了)
在目标数据库的“备份”点击右键 然后选择“还原备份从....” 然后选择 你刚才 备份的那个备份的文件 然后恢复备份操作 之后那些视图就导入进去了
温馨提示:如果不知道刚才备份的那个文件在哪的话 可以在源数据库的“备份”点击右键 选择“在文件夹显示”
还原备份的时候 在“还原”窗口的“高级”tab页 根据自己的需求选择是否覆盖