Mysql将数据库导入另一个数据库的时候,执行sql文件或查询语句报错:
[SQL] Query main start
[ERR] 1146 - Table 'xxx_view' doesn't exist
[ERR]
CREATE ALGORITHM = UNDEFINED SQL SECURITY DEFINER VIEW `xxx_view` AS select `cp`.`id` AS `id`,`cp`.`is_delete` AS `is_delete`,`cp`.`name` AS `name`,`cp`.`cost` AS `cost`,`cp`.`business_area_id` AS `business_area_id`,`cp`.`charge_type_id` AS `charge_type_id`,`cp`.`remark` AS `remark`,`cp`.`create_user_id` AS `create_user_id`,`cp`.`create_user` AS `create_user`,`cp`.`create_time` AS `create_time`,`cp`.`modify_user_id` AS `modify_user_id`,`cp`.`modify_user` AS `modify_user`,`cp`.`modify_time` AS `modify_time`,`ba`.`name` AS `business_area`,`d`.`dict_value` AS `charge_type` from ((`charge_package` `cp` left join `business_area` `ba` on((`ba`.`id` = `cp`.`business_area_id`))) left join `dict` `d` on((`cp`.`charge_type_id` = `d`.`id`))) where (`cp`.`is_delete` = 0);
这时候查看新导的数据库,发现表已经全部导入,而数据库内的视图导入到一半,就报错终止了。
这是因为在新建视图的时候,是有序的,新建好视图以后,mysql会以首字母排序视图,使得我们之前添加的视图顺序错乱,而某些特定的情况下,视图之间存在有依赖,所以在被依赖的视图还未添加之前,mysql语句就执行依赖的语句,自然就会报错。
解决:
查看报错信息,手动添加单视图Table ‘xxx_view’
之后再重新执行sql文件,再遇到报错再逐一手动添加对应报错的视图,重复此步骤即可。