天天看點

MySQL資料導入導出方法與工具mysqlimport

MySQL資料導入導出方法與工具mysqlimport<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

1.mysqlimport的文法介紹:

 mysqlimport Meet_A_Geek Customers.txt

其中表的名字是導入檔案的第一個句号(.)前面檔案字元串,另外一個例子:

 mysqlimport Meet_A_Geek Cus.to.mers.txt

上面的例子中,都隻用到兩個參數,并沒有用到更多的選項,下面介紹mysqlimport的選項

2.mysqlimport的常用選項介紹:

選項 功能

 -d or --delete 新資料導入資料表中之前删除資料資料表中的所有資訊

 -f or --force 不管是否遇到錯誤,mysqlimport将強制繼續插入資料

 -i or --ignore mysqlimport跳過或者忽略那些有相同唯一

關鍵字的行, 導入檔案中的資料将被忽略。

 -r or -replace 這個選項與-i選項的作用相反;此選項将替代 表中有相同唯一關鍵字的記錄。

 --fields-enclosed- by= char 指定文本檔案中資料的記錄時以什麼括起的, 很多情況下 資料以雙引号括起。 預設的情況下資料是沒有被字元括起的。

 --fields-terminated- by=char 指定各個資料的值之間的分隔符,在句号分隔的檔案中, 分隔符是句号。您可以用此選項指定資料之間的分隔符。 預設的分隔符是跳格符(Tab)

 --lines-terminated- by=str 此選項指定文本檔案中行與行之間資料的分隔字元串 或者字元。 預設的情況下mysqlimport以newline為行分隔符。 您可以選擇用一個字元串來替代一個單個的字元: 一個新行或者一個回車。

3.例子:導入一個以逗号為分隔符的檔案

檔案中行的記錄格式是這樣的:

 "1", "ORD89876", "1 Dozen Roses", "19991226"

 bin/mysqlimport –prl –fields-enclosed-by=" –fields-terminated-by=, Meet_A_Geek Orders.txt

為了實作批處理,您重定向一個檔案到mysql程式中,首先我們需要一個文本檔案,這個文本檔案包含有與我們在mysql中輸入的指令相同的文本。 //www.w3sky.com

比如我們要插入一些資料,使用包含下面文本的檔案(檔案名為New_Data.sql,當然我們也可以取名為New_Data.txt及任何其他的合法名字,并不一定要以字尾sql結尾):

 USE Meet_A_Geek;

 INSERT INTO Customers (Customer_ID, Last_Name) VALUES(NULL, "Block");

 INSERT INTO Customers (Customer_ID, Last_Name) VALUES(NULL, "Newton");

 INSERT INTO Customers (Customer_ID, Last_Name) VALUES(NULL, "Simmons");

[1] [2] [3] 下一頁  

然後運作下面的指令:

 bin/mysql –p 

LOAD DATA INFILE

啟動mysql指令行:

 bin/mysql –p

按提示輸入密碼,成功進入mysql指令行之後,輸入下面的指令:

 LOAD DATA INFILE "/home/mark/data.sql" INTO TABLE Orders;

 LOAD DATA LOCAL INFILE "C:\MyDocs\SQL.txt" INTO TABLE Orders;

 LOAD DATA LOW_PRIORITY INFILE "/home/mark/data.sql" INTO TABLE Orders;

您也可以指定是否在插入資料的時候,取代或者忽略檔案與資料表中重複的鍵值。替代重複的鍵值的文法:

 LOAD DATA LOW_PRIORITY INFILE "/home/mark/data.sql" REPLACE INTO TABLE Orders;

 上面的句子看起來有點笨拙,但卻把關鍵字放在了讓您的剖析器可以了解的地方。 //from www.w3sky.com

下面的一對選項描述了檔案的記錄格式,這些選項也是在mysqlimport工具中可以用的。他們在這裡看起來有點不同。首先,要用到FIELDS關鍵字,如果用到這個關鍵字,MySQL剖析器希望看到至少有下面的一個選項:

 TERMINATED BY character

 ENCLOSED BY character

 ESCAPED BY character

這些關鍵字與它們的參數跟mysqlimport中的用法是一樣的. The TERMINATED BY 描述字段的分隔符,預設情況下是tab字元(\t)

 ENCLOSED BY描述的是字段的括起字元。比方以引号括起每一個字段。

 ESCAPED BY 描述的轉義字元。預設的是反些杠(backslash:\ ).

 LOAD DATA INFILE "/home/mark/Orders.txt" REPLACE INTO TABLE Orders FIELDS TERMINATED BY ',' ENCLOSED BY '"';

LOAD DATA INFILE語句中有一個mysqlimport工具中沒有特點:

 LOAD DATA INFILE "/home/Order.txt" INTO TABLE Orders(Order_Number, Order_Date, Customer_ID);

如您所見,我們可以指定需要的欄目(fields)。這些指定的字段依然是以括号括起,由逗号分隔的,如果您遺漏了其中任何一個,MySQL将會提醒您

導出資料的方法:Methods of Exporting Data

上一頁  [1] [2] [3] 下一頁  

使用mysqldump:

(mysqldump指令位于mysql/bin/目錄中)

 bin/mysqldump –p Meet_A_Geek > MeetAGeek_Dump_File.txt

 bin/mysqldump –p Meet_A_Geek Orders >MeetAGeek_Orders.txt

這個非常的靈活,您甚至可以使用WHERE從句來選擇您需要的記錄導出到檔案中。要達到這樣的目的,可以使用類似于下面的指令:

 bin/mysqldump –p –where="Order_ID > 2000" Meet_A_Geek Orders > Special_Dump.txt

mysqldump工具有大量的選項,部分選項如下:

選項/Option 作用/Action Performed

 --add-drop-table

 這個選項将會在每一個表的前面加上DROP TABLE IF

--add-locks

 這個選項會在INSERT語句中捆上一個LOCK TABLE和UNLOCK

-c or - complete_insert

 --delayed-insert 在INSERT指令中加入DELAY選項

 -f or -force 使用這個選項,即使有錯誤發生,仍然繼續導出

 --full 這個選項把附加資訊也加到CREATE TABLE的語句中

 -t or -no-create- info

 -d or -no-data 這個選項使的mysqldump指令不建立INSERT語句。

 在您隻需要DDL語句時,可以使用這個選項。

 --opt 此選項将打開所有會提高檔案導出速度和創造一個可以更快導入的檔案的選項。 //from www.w3sky.com

-q or -quick 這個選項使得MySQL不會把整個導出的内容讀入記憶體再執行導出,而是在讀到的時候就寫入導檔案中。

 -T path or -tab = path 這個選項将會建立兩個檔案,一個檔案包含DDL語句或者表建立語句,另一個檔案包含資料。DDL檔案被命名為table_name.sql,資料檔案被命名為table_name.txt.路徑名是存放這兩個檔案的目錄。目錄必須已經存在,并且指令的使用者有對檔案的特權。

 -w "WHERE Clause" or -where = "Where clause "

 如前面所講的,您可以使用這一選項來過篩選将要放到 導出檔案的資料。

 bin/mysqldump –p –where "Order_Date >='2000-01-01'"

 –tab = /home/mark –no-create-info –fields-terminated-by=, Meet_A_Geek Orders

 這将會得到您想要的結果。

schema:模式

SELECT INTO OUTFILE :

 如果您覺得mysqldump工具不夠酷,就使用SELECT INTO OUTFILE吧, MySQL同樣提供一個跟LOAD DATA INFILE指令有相反作用的指令,這就是SELECT INTO OUTFILE 指令,這兩個指令有很多的相似之處。首先,它們有所有的選項幾乎相同。現在您需要完成前面用mysqldump完成的功能,可以依照下面的步驟進行操作:

 1. 確定mysqld程序(服務)已經在運作

 2. cd /usr/local/mysql

 3. bin/mysqladmin ping ;// 如果這個句子通不過,可以用這個:mysqladmin -u root -p ping mysqladmin ping用于檢測mysqld的狀态,is alive說明正在運作,出錯則可能需要使用者名和密碼。

 4. 啟動MySQL 監聽程式.

 6. 在指令行中,輸入一下指令:

SELECT * INTO OUTFILE '/home/mark/Orders.txt'

 FIELDS

 TERMINATED BY = ','

 FROM Orders

 WHERE Order_Date >= '2000-01-01'

在你按了Return(回車)之後,檔案就建立了。這個句子就像一個規則的SELECT語句,隻是把想螢幕的輸出重定向到了檔案中。這意味這您可以使用JOIN來實作多表的進階查詢。這個特點也可以被用作一個報表産生器。

比方說,您可以組合這一章中讨論的方法來産生一個非常有趣的查詢,試試這個:

在mysql目錄建立一個名為Report_G.rpt 的文本檔案,加入下面的行:

USE Meet_A_Geek;

INSERT INTO Customers (Customer_ID, Last_Name, First_Name)

VALUES (NULL, "Kinnard", "Vicky");

VALUES (NULL, "Kinnard", "Steven");

VALUES (NULL, "Brown", "Sam");

SELECT Last_Name INTO OUTFILE '/home/mark/Report.rpt'

FROM Customers WHERE Customer_ID > 1; 

然後确認 mysql程序在運作,并且您在mysql目錄中, 輸入下面的指令:

bin/mysql 

翻譯聲明: 本文内容來自Sam's Teach Yourself MySQL in 21 Days一書的部分内容,by Mark Maslakowski 英文原文版權屬原作者所有,中文的部分翻譯有略有增删;原書講的過于清楚的地方有删,講的不清楚的地方有增;如果有翻譯的不妥或者不正确的地方,請指正。

上一頁  [1] [2] [3]