3

mysqldump使用按字母顺序列出的表(和视图)创建转储。当表之间存在外键关系时,这不是很方便,但是,通过运行可以轻松解决问题:

SET FOREIGN_KEY_CHECKS=0;

我有一种情况,即视图 vwapple 依赖于视图 vworange,比如说。使用 mysqldump,vwapple 在 vworange 之前列出并执行,这是有问题的,因为我们会收到“查看 vworange 不存在”错误消息。

这种情况如何解决?视图是否具有与表类似的解决方案?还是让每个视图独立来解决这个问题更好?

注意
我正在使用 python 脚本恢复数据库。每个视图和表都在其单独的 .sql 文件中,因为我想独立地对每个数据库对象进行源代码控制。

4

1 回答 1

4

最近的版本mysqldump,在转储整个数据库时,以这种方式解决问题:对于数据库中的每个视图,他们首先创建一个具有相同结构的空表,然后创建视图,在创建视图之前删除每个占位符表。似乎用视图替换表不会损害依赖它的视图。

我知道这一点是因为这种方法有另一个缺陷,这让我很苦恼:视图中的行可能包含比表中的行更多的数据,因此无法创建一些占位符表,导致某些转储在没有人工干预的情况下无法恢复。出于这个原因,视图的拓扑排序会更可取,尽管它可能需要一些工作。

于 2012-07-21T23:51:33.650 回答