我有一个返回大量数据的视图。现在,视图被加载到这样的文件中:
SELECT * FROM view INTO OUTFILE /path/to/file.tmp;
然后从该文件加载到表:
LOAD DATA INFILE /path/to/file.tmp INTO TABLE table;
然后mysqldump用于创建此表的转储(实际上是多个表,前两个步骤重复多次,然后运行mysqldump)。
有更好的方法吗?理想情况下,我想这样做而无需将任何内容保存到文件中。是否可以使用单个语句从视图创建数据的sql转储?
答案 0 :(得分:1)
INSERT INTO table (col1, col2, col3...)
SELECT col1, col2, col3... FROM view
应该做的伎俩。
答案 1 :(得分:1)
不使用mysqldump。 mysqldump只导出视图定义,而不是数据。
您可以使用INSERT ... SELECT
语法减少一步所得的内容。也就是说,从视图直接插入新表。然后是mysqldump那个。不需要file.tmp文件。像
INSERT INTO table SELECT * FROM view;
另一种可能性是编写一个代替mysqldump的程序来导出视图,就像它是一个表一样。该程序可以检查视图结构并以与mysqldump兼容的格式导出数据。