如何将整个数据库MYSQL导出到CSV文件?

时间:2013-05-10 14:57:08

标签: php mysql

我有一个名为 demo_db 的数据库 使用下表:

user
  Id
  Name

history
  Id
  userId
  report

start_test
  Id
  userId
  score

final_test
  Id
  userId
  score

如何在MySQL中使用INTO OUTFILE将所有表导出为CSV文件?所以我可以拥有列名和数据下方,我希望能够添加过滤器,如果有可能的方法将每个表添加到同一文件中的新选项卡....或者我可以只显示所有每个用户在一行中的数据??

我不能做类似的事情:SELECT user。,history。,start_test。*,final_test。* INTO OUTFILE FROM user,history,start_test,final_test < / p>

我是用mysqldump做的,但它并没有按照我想要的方式呈现数据。

我正在用PHP做这件事。

4 个答案:

答案 0 :(得分:2)

没有命令直接执行此操作,您需要模拟mysqldump的行为并以您希望的方式输出CSV。

$FILE = fopen("output.csv", "w");
mysql_connect($server, $login, $password);
$res = mysql_query("SHOW TABLES FROM $db");
$tables = array();
while($row = mysql_fetch_array($res, MYSQL_NUM)) {
    $tables[] = "$row[0]";
}
foreach($tables as $table) {
    $columns = array();
    $res = mysql_query("SHOW COLUMNS FROM $table");
    while($row = mysql_fetch_array($res, MYSQL_NUM)) {
        $columns[] = "$row[0]";
    }
    fwrite($FILE, implode(",", $columns); fwrite("\n");
    $resTable = mysql_query("SELECT * FROM $table");
    while($row = mysql_fetch_array($resTable, MYSQL_NUM)) {
        fwrite($FILE, implode(",", $row)); fwrite("\n");
    }
}

MYSQL_NUM用于为您提供数字索引数组。

如果您不想输出到文件,而是直接从网站下载到您的计算机,请将以下行添加到脚本的开头:

header('Content-Type: text/csv; name="filename.csv"');
header('Content-Disposition: attachment; filename="filename.csv"');

将fwrites更改为echo或print。

哦,我在输出中添加了一些换行符,因为我相信你不会想要一条很长的行。

答案 1 :(得分:0)

如果您使用的是phpmyadmin

然后转到导出 - &gt;点击自定义 - display all possible options

您将在下方找到复选框Put columns names in the first row。检查要在第一行和下面获取列名称,您将获得数据。

答案 2 :(得分:0)

CREATE VIEW MY_VIEW
AS
SELECT user.*, history.*, start_test.*, final_test.*
FROM
user, history, start_test, final_test
WHERE user.id = history.userId
AND user.id = start.userId
AND user.id = final.userId

转储视图的内容使用phpmyadmin中的导出工具

答案 3 :(得分:0)

此代码段取自http://dev.mysql.com/doc/refman/5.6/en/select-into.html

SELECT a,b,a+b INTO OUTFILE '/tmp/result.txt'
  FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
  LINES TERMINATED BY '\n'
  FROM test_table;