当前位置:数据库 > SQLServer >>

MySQL数据导入导出方法与工具介绍

摘自http://qfxy.org.ru/read.php?tid=3071&page=e

MySQL数据导入导出方法与工具介绍(1)
翻译声明:
本文内容来自Sams Teach Yourself MySQL in 21 Days一书的部分内容,by Mark Maslakowski
英文原文版权属原作者所有,中文的部分翻译有略有增删;原书讲的过于清楚的地方有删,讲的不清楚的地方有增;如果有翻译的不妥或者不正确的地方,请指正。

翻译者:David Euler,SCU. de_euler-david@www.yahoo.com.cn
时间:2004/04/24于川大

1).mysqlimport的语法介绍:
mysqlimport位于mysql/bin目录中,是mysql的一个载入(或者说导入)数据的一个非常有效的工具。这是一个命令行工具。有两个参数以及大量的选项可供选择。这个工具把一个文本文件(text file)导入到你指定的数据库和表中。比方说我们要从文件Customers.txt中把数据导入到数据库Meet_A_Geek中的表 Custermers中:
mysqlimport Meet_A_Geek Customers.txt
注意:这里Customers.txt是我们要导入数据的文本文件,而Meet_A_Geek是我们要操作的数据库,数据库中的表名是Customers,这里文本文件的数据格式必须与Customers表中的记录格式一致,否则mysqlimport命令将会出错。
其中表的名字是导入文件的第一个句号(.)前面文件字符串,另外一个例子:
mysqlimport Meet_A_Geek Cus.to.mers.txt
那么我们将把文件中的内容导入到数据库Meet_A_Geek 中的Cus表中。上面的例子中,都只用到两个参数,并没有用到更多的选项,下面介绍mysqlimport的选项。

2).mysqlimport的常用选项介绍:
    选项             功能
-d or --delete     新数据导入数据表中之前删除数据数据表中的所有信息
-f or --force     不管是否遇到错误,mysqlimport将强制继续插入数据
-i or --ignore     mysqlimport跳过或者忽略那些有相同唯一关键字的行, 导入文件中的数据将被忽略。
-l or -lock-tables 数据易做图入之前锁住表,这样就防止了,你在更新数据库时,用户的查询和更新受到影响。
-r or -replace     这个选项与-i选项的作用相反;此选项将替代表中有相同唯一关键字的记录。
--fields-enclosed- by= char
          指定文本文件中数据的记录时以什么括起的, 很多情况下数据以双引号括起。 默认的情况下数据是没有被字符括起的。
--fields-terminated- by=char
          指定各个数据的值之间的分隔符,在句号分隔的文件中,分隔符是句号。您可以用此选项指定数据之间的分隔符。默认的分隔符是跳格符(Tab)
--lines-terminated- by=str
          此选项指定文本文件中行与行之间数据的分隔字符串或者字符。 默认的情况下mysqlimport以newline为行分隔符。
          您可以选择用一个字符串来替代一个单个的字符:一个新行或者一个回车。
mysqlimport命令常用的选项还有-v 显示版本(version), -p 提示输入密码(password)等。

3).例子:导入一个以逗号为分隔符的文件文件中行的记录格式是这样的:
"1", "ORD89876", "1 Dozen Roses", "19991226"
我们的任务是要把这个文件里面的数据导入到数据库Meet_A_Geek中的表格Orders中,我们使用这个命令:
bin/mysqlimport –prl –fields-enclosed-by=" –fields-terminated-by=, Meet_A_Geek Orders.txt
这个命令可能看起来很不爽,不过当你熟悉了之后,这是非常简单的。
第一部分,bin/mysqlimport ,告诉操作系统你要运行的命令是mysql/bin目录下的mysqlimport,选项p是要求输入密码,这样就要求你在改动数据库之前输入密码,操作起来会更安全。我们用了r选项是因为我们想要把表中的唯一关键字与文件记录中有重复唯一关键字的记录替换成文件中的数据。我们表单中的数据不是最新的,需要用文件中的数据去更新,因而就用r这个选项,替代数据库中已经有的记录。l选项的作用是在我们插入数据的时候锁住表,这样就阻止了用户在我们更新表的时候对表进行查询或者更改的操作。

--------------------------------------------------------------------------------
从 MySQL 导入导出大量数据的程序实现方法
http://www.cx66.com/cxgzs/tips/00773.htm
大家一定使用过 phpmyadmin 里面的数据库导入,导出功能,非常方便。但是在实际应用中,我发现如下几个问题:
1、数据库超过一定尺寸,比如6M 这时使用导出一般没问题,可以正确的保存到本机硬盘上面,但是导入则不行!原因是:一般的 PHP.INI 里面设置临时文件/上传文件的大小限制为2M,而phpmyadmin使用了上传的方式,造成失败。
2、导出到硬盘的 .SQL 文件在导回时,经常出现由于某些单引号的问题引起失败,造成导入失败,只能用 mysql等应用程序导入了。
我的数据库已经超过10M,所以必须解决这个问题。我的思路:
导出: 用phpmyadmin 保存数据库/表格结构,用脚本读取数据库内容并保存到文件里面!
导入: 用phpmyadmin 恢复数据库/表格结构,用脚本读取文件,然后保存到库里面!

导出程序如下:调用方法为 ****.php?table=tablename
这个简单的程序目前一次保存一个表格!!每行为一个字段的数据!!
if($table=="")exit();
mysql_connect("localhost","name","password");
mysql_select_db("database");
$result = mysql_query("select * from $table");
if(mysql_num_rows($result) < = 0) exit();
echo "开始转换数据到文本...
";
$handle = fopen("$table.txt","w");
$numfields = mysql_num_fields($result);
fputs($handle,$numfields." ");
for($k=0;$k
{
$msg = mysql_fetch_row($result);
for($i=0;$i< $numfields;$i++)
{
$msg[$i] = str_replace(" ","&&php2000mysqlreturn&&",$msg[$i]);
$msg[$i] = str_replace(" " ,"&&php2000mysqlreturn&&",$msg[$i]);
fputs($handle,$msg[$i]." ");
}
fputs($handle,"------- php2000 dump data program V1.0 for MySQL -------- ");
}
fclose($handle);
echo "ok";
?>

导入的程序如下:用法同上面!
if($table=="")exit();
mysql_connect("localhost","name","password");
mysql_select_db("database");
$message = file("$table.txt");
echo $numfields = chop($message[0]);
for($k=1;$k
{
$value="";
for ($i=$k;$i< ($k+$numfields-1);$i++)
{
$tmp = str_replace("&&php2000mysqlreturn&&"," ",chop($message[$i]));
$value .= "".addslashes($tmp).",";
}
$tmp = str_replace("&&php2000mysqlreturn&&"," ",chop($message[$k+$numfields-1]));
$value .= "".$tmp."";
$query = "insert into $table values (".$value.")";
echo mysql_error();
mysql_query($query);
echo $k." ";
}
echo "ok";
?>

使用方法和可能的问题!
1、导入时 file()函数可能会有问题(我的10M的数据没出现问题),可以改为 fopen()然后没次读一行!!
2、导入,导出都需要用 ftp 操作,也就是导出后,用 ftp 把数据转到本机,导入时先用ftp转移数据到服务器!
----------------------------

mysql数据库常用导出导入命令的几个用例
www.yiz.name
================================
几个常用用例:

1.导出整个数据库
mysqldump -u 用户名 -p 数据库名 > 导出的文件名  
mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sql
2.导出一个表
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
mysqldump -u wcnc -p smgp_apps_wcnc users> wcnc_users.sql
3.导出一个数据库结构
mysqldump -u wcnc -p -d --add-drop-table smgp_apps_wcnc >d:wcnc_db.sql

-d 没有数据 --add-drop-table 在每个create语句之前增加一个drop tab

补充:Web开发 , php ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,