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

bar*_*ter 12 mysql export view

假设我的数据库中有一个视图,我想向某人发送一个文件,以便将该视图的输出创建为数据库中的表.

mysqldump当然只导出'create view ...'语句(好吧,好吧,它包含了create table,但没有数据).

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

create table tmptable select * from myview
Run Code Online (Sandbox Code Playgroud)

如果没有创建一个模仿mysqldump行为的脚本,那么还有更好的方法吗?

Gon*_*Cao 1

同样的问题在这里我的问题是我想将视图定义(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 格式的数据。