假设我在数据库中有一个视图,我想向某人发送一个文件,以便他们可以将该视图的输出作为表格创建到他们的数据库中。
当然,mysqldump仅导出“create view…”语句(好吧,它包括create table,但不包括数据)。
我的做法是将该视图简单地复制为真实表格并进行转储。但对于大型表格,这很慢且浪费资源:
create table tmptable select * from myview
除了创建一个模仿mysqldump行为并执行此操作的脚本之外,是否有更好的方法?
假设我在数据库中有一个视图,我想向某人发送一个文件,以便他们可以将该视图的输出作为表格创建到他们的数据库中。
当然,mysqldump仅导出“create view…”语句(好吧,它包括create table,但不包括数据)。
我的做法是将该视图简单地复制为真实表格并进行转储。但对于大型表格,这很慢且浪费资源:
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 '\'
完成上述步骤后,导入时需要使用"load data infile"命令,并使用与之前相同的终止符/封闭符/转义符。
FIELDS TERMINATED BY ',' ESCAPED BY '\\'
。 - Alix Axelmysql -uxxxx -pxxxxxx my_db -e "create table if not exists my_view_def as select * from my_view limit 0;"
mysqldump -uxxxx -pxxxxxx my_db my_view_def | sed s/my_view_def/my_view/g > /tmp/my_view.sql
mysql -uxxxx -pxxxxxx my_db -e "drop table my_view_def;"
SELECT * from my_view into outfile "/tmp/my_view.csv" fields terminated BY ";" ENCLOSED BY '"' LINES TERMINATED BY '\n';
然后你会得到两个文件,一个是定义文件,另一个是CSV格式的数据文件。