繁体   English   中英

将 MySQL 视图转储为包含数据的表

[英]Dump MySQL view as a table with data

假设我的数据库中有一个视图,我想向某人发送一个文件以创建该视图的 output 作为他们数据库中的一个表。

mysqldump 当然只导出 'create view...' 语句(好吧,它包括创建表,但没有数据)。

我所做的只是将视图复制为真实表并将其转储。 但是对于一张大桌子来说,它既慢又浪费:

create table tmptable select * from myview

如果没有创建一个模仿 mysqldump 行为的脚本并执行此操作,是否有更好的方法?

一种选择是对CSV文件进行查询并导入。 要选择CSV文件:

来自http://www.tech-recipes.com/rx/1475/save-mysql-query-results-into-a-text-or-csv-file/

SELECT order_id,product_name,qty
FROM orders
INTO OUTFILE '/tmp/orders.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'

好的,基于您的CSV失败评论,请从Paul的回答开始。 对其进行以下更改:

 - FIELDS TERMINATED BY ','
 + FIELDS TERMINATED BY ',' ESCAPED BY '\'

完成后,在导入端,您将执行“加载数据infile”并使用相同的终止/封闭/转义语句。

同样的问题我的问题是我想将视图定义(84 个字段和数百万条记录)导出为“创建表”语句,因为视图可以随时间变化并且我想要一个自动过程。 所以这就是我所做的:

  1. 从视图创建表但没有记录

mysql -uxxxx -pxxxxxx my_db -e "create table if not exists my_view_def as select * from my_view limit 0;"

  1. 导出新表定义。 我正在添加一个 sed 命令来更改表名 my_view_def 以匹配原始视图名称(“my_view”)

mysqldump -uxxxx -pxxxxxx my_db my_view_def | sed s/my_view_def/my_view/g > /tmp/my_view.sql

  1. 删除临时表

mysql -uxxxx -pxxxxxx my_db -e "drop table my_view_def;"

  1. 将数据导出为 CSV 文件

SELECT * from my_view into outfile "/tmp/my_view.csv" fields terminated BY ";" ENCLOSED BY '"' LINES TERMINATED BY '\n';

然后您将拥有两个文件,一个包含定义,另一个包含 CSV 格式的数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM