程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> MySQL數據導入導出方法與工具介紹

MySQL數據導入導出方法與工具介紹

編輯:關於PHP編程

摘自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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved