數據導出
數據導出主要有以下幾種方法:
1)使用select into outfile "filename"語(yǔ)句
2)使用mysqldump實(shí)用程序
使用select into outfile "filename"語(yǔ)句
可以在mysql的命令行下或在php程序中執行它。我下面以在mysql命令行下為例。在php中使用時(shí),將其改成相應的查詢(xún)進(jìn)行處理即可。不過(guò)在使用這個(gè)命令時(shí),要求用戶(hù)擁有file的權限。如我們有一個(gè)庫為phptest,其中有一個(gè)表為driver?,F在要把driver卸成文件。執行命令:
mysql> use phptest;
Database Changed
mysql> select * from driver into outfile "a.txt";
Query OK, 22 rows affected (0.05 sec)
上面就可以完成將表driver從數據庫中卸到a.txt文件中。注意文件名要加單引號。那么這個(gè)文件在哪呢?在mysql目錄下有一個(gè) data目錄,它即是數據庫文件所放的地方。每個(gè)庫在單獨占一個(gè)子目錄,所以phptest的目錄為c:\mysql\data\phptest(注意:我的mysql安裝在c:\mysql下)。好,現在我們進(jìn)去,a.txt就是它。打開(kāi)這個(gè)文件,可能是:
1 Mika Hakinnen 1
2 David Coulthard 1
3 Michael Schumacher 2
4 Rubens Barrichello 2
...
TERMINATED 表示字段分隔
[OPTIONALLY] ENCLOSED 表示字段用什么字符包括起來(lái),如果使用了OPTIONALLY則只有CHAR和VERCHAR被包括ESCAPED 表示當需要轉義時(shí)用什么作為轉義字符LINES TERMINATED 表示每行記錄之間用什么分隔
上面列的是缺省值,而且這些項都是可選的,不選則使用缺省值??梢愿鶕枰M(jìn)行修改。給出一個(gè)例子如下:
mysql> select * from driver into outfile "a.txt" fields terminated by "," enclosed by """;
Query OK, 22 rows affected (0.06 sec)
結果可能如下:
"1","Mika","Hakinnen","1"
"2","David","Coulthard","1"
"3","Michael","Schumacher","2"
"4","Rubens","Barrichello","2"
...
可以看到每個(gè)字段都用","進(jìn)行了分隔,且每個(gè)字段都用"""包括了起來(lái)。注意,行記錄分隔符可以是一個(gè)字符串,請大家自行測試。不過(guò),如果輸出文件在指定目錄下如果存在的話(huà)就會(huì )報錯,先刪除再測試即可。
使用mysqldump實(shí)用程序 可能結果如下: INSERT INTO driver VALUES (1,"Mika","Hakinnen",1); 如果只想卸出建表指令,則命令如下: 如果只想卸出插入數據的sql命令,而不需要建表命令,則命令如下: 那么如果我只想要數據,而不想要什么sql命令時(shí),應該如何操作呢? 其中,只有指定了-T參數才可以卸出純文本文件,表示卸出數據的目錄,./表示當前目錄,即與 對卸出的數據文件,也可以同select方法一樣,指定字段分隔符,包括字符,轉義字段,行記錄分隔符。參數列在下面: 輸出結果為:
從上面的select方法可以看出,輸出的文件只有數據,而沒(méi)有表結構。而且,一次只能處理一個(gè)表,要處理多個(gè)表則不是很容易的。不過(guò)可以將select命令寫(xiě)入一個(gè)sql 文件(復制文本應該是很容易的吧),然后在命令行下執行即可:mysql 庫名
先來(lái)個(gè)最簡(jiǎn)單的吧:
mysqldump phptest > a.sql
# MySQL dump 7.1
#
# Host: localhost Database: phptest
#--------------------------------------------------------
# Server version 3.22.32-shareware-debug
#
# Table structure for table "driver"
#
CREATE TABLE driver (
drv_id int(11) DEFAULT "0" NOT NULL auto_increment,
drv_forename varchar(15) DEFAULT "" NOT NULL,
drv_surname varchar(25) DEFAULT "" NOT NULL,
drv_team int(11) DEFAULT "0" NOT NULL,
PRIMARY KEY (drv_id)
);
#
# Dumping data for table "driver"
#
INSERT INTO driver VALUES (2,"David","Coulthard",1);
INSERT INTO driver VALUES (3,"Michael","Schumacher",2);
INSERT INTO driver VALUES (4,"Rubens","Barrichello",2);
...
如果有多表,則分別列在下面??梢钥吹竭@個(gè)文件是一個(gè)完整的sql文件,如果要將其導入到其它的數據庫中可以通過(guò)命令行方式,很方便:mysql phptest < a.sql。如果將數據從本地傳到服務(wù)器上,則可以將這個(gè)文件上傳,然后在服務(wù)器通過(guò)命令行方式裝入數據。
mysqldump -d phptest > a.sql
mysqldump -t phptest > a.sql
mysqldump -T./ phptest driver
mysqldump同一目錄。如果不指定driver表,則將卸出整個(gè)數據庫的數據。每個(gè)表會(huì )生成兩個(gè)文件,一個(gè)為.sql文件,包含建表執行。另一個(gè)為.txt文件,只包含數據,且沒(méi)有sql指令。
--fields-terminated-by= 字段分隔符
--fields-enclosed-by= 字段包括符
--fields-optionally-enclosed-by= 字段包括符,只用在CHAR和VERCHAR字段上
--fields-escaped-by= 轉義字符
--lines-terminated-by= 行記錄分隔符
我想大家應該明白這些參數的意思了吧。一個(gè)例子如下:
mysqldump -T./ --fields-terminated-by=, --fields-enclosed-by=\" phptest driver
"1","Mika","Hakinnen","1"
"2","David","Coulthard","1"
"3","Michael","Schumacher","2"
"4","Rubens","Barrichello","2"
...
請注意字符的使用。
小結
以上為使用select和mysqldump實(shí)用程序來(lái)卸出文本的方法。select適合利用程序進(jìn)行處理,而mysqldump則為手工操作,同時(shí)提供強大的導出功能,并且可以處理整個(gè)庫,或庫中指定的多表。大家可以根據需求自行決定使用。
同時(shí)還有一些方法,如直接數據庫文件拷貝也可以,但是移動(dòng)后的數據庫系統與原系統應一致才行。這里就不再提了。
導入 使用load命令: 使用mysqlimport實(shí)用程序: 對于第三種,則可以使用由mysqldump導出的sql文件,在命令行下執行: mysq l庫名 MySQLimport位于MySQL/bin目錄中,是MySQL的一個(gè)載入(或者說(shuō)導入)數據的一個(gè)非常有效的工具。這是一個(gè)命令行工具。有兩個(gè)參數以及大量的選項可供選擇。這個(gè)工具把一個(gè)文本文件(text file)導入到你指定的數據庫和表中。比方說(shuō)我們要從文件Customers.txt中把數據導入到數據庫Meet_A_Geek中的表 Custermers中: MySQLimport Meet_A_Geek Customers.txt 注意:這里Customers.txt是我們要導入數據的文本文件,而Meet_A_Geek是我們要操作的數據庫,數據庫中的表名是Customers,這里文本文件的數據格式必須與Customers表中的記錄格式一致,否則MySQLimport命令將會(huì )出錯。 其中表的名字是導入文件的第一個(gè)句號(.)前面文件字符串,另外一個(gè)例子:MySQLimport Meet_A_Geek Cus.to.mers.txt 那么我們將把文件中的內容導入到數據庫Meet_A_Geek 中的Cus表中。 上面的例子中,都只用到兩個(gè)參數,并沒(méi)有用到更多的選項,下面介紹MySQLimport的選項 2.MySQLimport的常用選項介紹: 選項 功能 -d or --delete 新數據導入數據表中之前刪除數據數據表中的所有信息 --fields-terminated- by=char 指定各個(gè)數據的值之間的分隔符,在句號分隔的文件中,分隔符是句號。您可以用此選項指定數據之間的分隔符。 默認的分隔符是跳格符(Tab) --lines-terminated- by=str 此選項指定文本文件中行與行之間數據的分隔字符串或者字符。 默認的情況下MySQLimport以newline為行分隔符。 您可以選擇用一個(gè)字符串來(lái)替代一個(gè)單個(gè)的字符: 一個(gè)新行或者一個(gè)回車(chē)。 MySQLimport命令常用的選項還有-v 顯示版本(version),-p 提示輸入密碼(password)等。 3.例子:導入一個(gè)以逗號為分隔符的文件 文件中行的記錄格式是這樣的: "1", "ORD89876", "1 Dozen Roses", "19991226" 我們的任務(wù)是要把這個(gè)文件里面的數據導入到數據庫Meet_A_Geek中的表格Orders中,我們使用這個(gè)命令: bin/MySQLimport –prl –fields-enclosed-by=" –fields-terminated-by=, Meet_A_Geek Orders.txt 這個(gè)命令可能看起來(lái)很不爽,不過(guò)當你熟悉了之后,這是非常簡(jiǎn)單的。第一部分,bin/MySQLimport ,告訴操作系統你要運行的命令是MySQL/bin目錄下的MySQLimport,選項p是要求輸入密碼,這樣就要求你在改動(dòng)數據庫之前輸入密碼,操作起來(lái)會(huì )更安全。我們用了r選項是因為我們想要把表中的唯一關(guān)鍵字與文件記錄中有重復唯一關(guān)鍵字的記錄替換成文件中的數據。我們表單中的數據不是最新的,需要用文件中的數據去更新,因而就用r這個(gè)選項,替代數據庫中已經(jīng)有的記錄。l選項的作用是在我們插入數據的時(shí)候鎖住表,這樣就阻止了用戶(hù)在我們更新表的時(shí)候對表進(jìn)行查詢(xún)或者更改的操作。 批處理是一種非交互式運行MySQL程序的方法,如同您在MySQL中使用的命令一樣,你仍然將使用這些命令。
為了實(shí)現批處理,您重定向一個(gè)文件到MySQL程序中,首先我們需要一個(gè)文本文件,這個(gè)文本文件包含有與我們在MySQL中輸入的命令相同的文本。 比如我們要插入一些數據,使用包含下面文本的文件(文件名為New_Data.sql,當然我們也可以取名為New_Data.txt及任何其他的合法名字,并不一定要以后綴sql結尾): USE Meet_A_Geek; 注意上面的這些句子的語(yǔ)法都必須是正確的,并且每個(gè)句子以分號結束。 上面的USE命令選擇數據庫,INSERT命令插入數據。 下面我們要把上面的文件導入到數據庫中,導入之前要確認數據庫已經(jīng)在運行,即是MySQLd進(jìn)程(或者說(shuō)服務(wù),Windows NT下面稱(chēng)為”服務(wù)“,unix下面為”進(jìn)程“)已經(jīng)在運行。 然后運行下面的命令: bin/MySQL –p < /home/mark/New_Data.sql 接著(zhù)按提示輸入密碼,如果上面的文件中的語(yǔ)句沒(méi)有錯誤,那么這些數據就被導入到了數據庫中。 命令行中使用LOAD DATA INFILE 從文件中導入數據到數據庫: 現在您可能會(huì )問(wèn)自己,"究竟為什么我要輸入所有的這些SQL語(yǔ)句到文件中,然后通過(guò)程序運行它們呢?” LOAD DATA INFILE 這是我們要介紹的最后一個(gè)導入數據到MySQL數據庫中的方法。這個(gè)命令與MySQLimport非常相似,但這個(gè)方法可以在MySQL命令行中使用。也就是說(shuō)您可以在所有使用API的程序中使用這個(gè)命令。使用這種方法,您就可以在應用程序中導入您想要導入的數據。 使用這個(gè)命令之前,MySQLd進(jìn)程(服務(wù))必須已經(jīng)在運行。 啟動(dòng)MySQL命令行: 按提示輸入密碼,成功進(jìn)入MySQL命令行之后,輸入下面的命令: USE Meet_A_Geek; 簡(jiǎn)單的講,這樣將會(huì )把文件data.sql中的內容導入到表Orders中,如MySQLimport工具一樣,這個(gè)命令也有一些可以選擇的參數。比如您需要把自己的電腦上的數據導入到遠程的數據庫服務(wù)器中,您可以使用下面的命令: 上面的LOCAL參數表示文件是本地的文件,服務(wù)器是您所登陸的服務(wù)器。
這樣就省去了使用ftp來(lái)上傳文件到服務(wù)器,MySQL替你完成了. 您也可以設置插入語(yǔ)句的優(yōu)先級,如果您要把它標記為低優(yōu)先級(LOW_PRIORITY),那么MySQL將會(huì )等到?jīng)]有其他人讀這個(gè)表的時(shí)候,才把插入數據??梢允褂萌缦碌拿睿? 您也可以指定是否在插入數據的時(shí)候,取代或者忽略文件與數據表中重復的鍵值。替代重復的鍵值的語(yǔ)法: LOAD DATA LOW_PRIORITY INFILE "/home/mark/data.sql" REPLACE INTO TABLE Orders; 上面的句子看起來(lái)有點(diǎn)笨拙,但卻把關(guān)鍵字放在了讓您的剖析器可以理解的地方。 下面的一對選項描述了文件的記錄格式,這些選項也是在MySQLimport工具中可以用的。他們在這里看起來(lái)有點(diǎn)不同。首先,要用到FIELDS關(guān)鍵字,如果用到這個(gè)關(guān)鍵字,MySQL剖析器希望看到至少有下面的一個(gè)選項: 這些關(guān)鍵字與它們的參數跟MySQLimport中的用法是一樣的. The 下面仍然使用前面的MySQLimport命令的例子,用LOAD DATA INFILE語(yǔ)句把同樣的文件導入到數據庫中: LOAD DATA INFILE "/home/mark/Orders.txt" REPLACE INTO TABLE Orders FIELDS TERMINATED BY ‘,‘ ENCLOSED BY ‘"‘; LOAD DATA INFILE語(yǔ)句中有一個(gè)MySQLimport工具中沒(méi)有特點(diǎn): LOAD DATA INFILE 可以按指定的列把文件導入到數據庫中。 當我們要把數據的一部分內容導入的時(shí)候,這個(gè)特點(diǎn)就很重要。比方說(shuō),我們要從Access數據庫升級到MySQL數據庫的時(shí)候,需要加入一些欄目(列/字段/field)到MySQL數據庫中,以適應一些額外的需要。 這個(gè)時(shí)候,我們的Access數據庫中的數據仍然是可用的,但是因為這些數據的欄目(field)與MySQL中的不再匹配,因此而無(wú)法再使用 MySQLimport工具。盡管如此,我們仍然可以使用LOAD DATA INFILE,下面的例子顯示了如何向指定的欄目(field)中導入數據: LOAD DATA INFILE "/home/Order.txt" INTO TABLE Orders(Order_Number, Order_Date, Customer_ID); 如您所見(jiàn),我們可以指定需要的欄目(fields)。這些指定的字段依然是以括號括起,由逗號分隔的,如果您遺漏了其中任何一個(gè),MySQL將會(huì )提醒您^_^ Importing Data from Microsoft Access (從Access中導入數據,略) 您可以看到MySQL有很多可以導入數據的方法,然而這些只是數據傳輸中的一半。另外的一般是從MySQL數據庫中導出數據。有許多的原因我們需要導出數據。一個(gè)重要的原因是用于備份數據庫。數據的造價(jià)常常是昂貴的,需要謹慎處理它們。經(jīng)常地備份可以幫助防止寶貴數據地丟失;另外一個(gè)原因是,也許您希望導出數據來(lái)共享。 在這個(gè)信息技術(shù)不斷成長(cháng)的世界中,共享數據變得越來(lái)越常見(jiàn)。 比方說(shuō)Macmillan USA維護護著(zhù)一個(gè)將要出版的書(shū)籍的大型數據庫。這個(gè)數據庫在許多書(shū)店之間共享,這樣他們就知道哪些書(shū)將會(huì )很快出版。醫院越來(lái)越走向采用無(wú)紙病歷記錄,這樣這些病歷可以隨時(shí)跟著(zhù)你。世界變得越來(lái)越小,信息也被共享得越來(lái)越多。有很多中導出數據得方法,它們都跟導入數據很相似。因為,畢竟,這些都只是一種透視得方式。從數據庫導出的數據就是從另一端導入的數據。這里我們并不討論其他的數據庫各種各樣的導出數據的方法,您將學(xué)會(huì )如何用MySQL來(lái)實(shí)現數據導出。
同導出相類(lèi)似,導入也有兩種方法:
1)使用LOAD DATA INFILE "filename"命令
2)使用mysqlimport實(shí)用程序
3)使用sql文件
由于前兩個(gè)處理與導出處理相似,只不過(guò)是它們的逆操作,故只給出幾種命令使用的例子,不再解釋了,大家可以自行查閱手冊。
load data infile "driver.txt" into table driver fields terminated by "," enclosed by """;
mysqlimport --fields-terminated-by=, --fields-enclosed-by=\" phptest driver.txt
1.MySQLimport的語(yǔ)法介紹:
-f or --force 不管是否遇到錯誤,MySQLimport將強制繼續插入數據
-i or --ignore MySQLimport跳過(guò)或者忽略那些有相同唯一關(guān)鍵字的行, 導入文件中的數據將被忽略。
-l or -lock-tables 數據被插入之前鎖住表,這樣就防止了,你在更新數據庫時(shí),用戶(hù)的查詢(xún)和更新受到影響。
-r or -replace 這個(gè)選項與-i選項的作用相反;此選項將替代表中有相同唯一關(guān)鍵字的記錄。
--fields-enclosed- by= char 指定文本文件中數據的記錄時(shí)以什么括起的, 很多情況下數據以雙引號括起。 默認的情況下數據是沒(méi)有被字符括起的。
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");
這樣看起來(lái)好像需要大量的工作。很好,你這樣想很可能就對了。但是假如你有從所有這些命令中產(chǎn)生的log記錄呢?現在這樣就很棒,嗯,大多數數據庫都會(huì )自動(dòng)產(chǎn)生數據庫中的事件記錄的 log。而大部分log都包含有用過(guò)的原始的SQL命令。因此,如果您不能從您現在的數據庫中導出數據到新的MySQL數據庫中使用,那么您可以使用 log和MySQL的批處理特性,來(lái)快速且方便地導入您地數據。當然,這樣就省去了打字的麻煩。
bin/MySQL –p
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;
TERMINATED BY character
ENCLOSED BY character
ESCAPED BY character
TERMINATED BY 描述字段的分隔符,默認情況下是tab字符(\t)
ENCLOSED BY描述的是字段的括起字符。比方以引號括起每一個(gè)字段。
ESCAPED BY 描述的轉義字符。默認的是反些杠(backslash:\ ).
備份
因為MySQL表作為文件存儲,做一個(gè)備份是容易的。為了得到一個(gè)一致的備份,在相關(guān)的表上做一個(gè)LOCK TABLES。你只需一個(gè)讀鎖定;當你在數據庫目錄中做文件的一個(gè)拷貝時(shí),這允許其他線(xiàn)程繼續查詢(xún)該表。如果你想要做一個(gè)SQL級的備份,你可以SELECT INTO OUTFILE。
備份一個(gè)數據庫的另一個(gè)方法是使用mysqldump程序:
shell> mysqldump --tab=/path/to/some/dir --opt --full
你也可以簡(jiǎn)單地拷貝所有的表文件(“*.frm”、“*.MYD”和“*.MYI”文件),只要服務(wù)器不在更新任何東西。(frame,data,index)
如果你必須恢復一些東西,嘗試首先用myisamchk -r恢復你的表。這應該處理所有情況的99.9%。如果myisamchk失敗,嘗試下列過(guò)程:
shell> ls -1 -t -r hostname.[0-9]* | xargs cat | mysql
ls被用來(lái)以正確的順序得到所有的日志文件。
你也可以與SELECT * INTO OUTFILE ‘file_name‘ FROM tbl_name做有選擇的備份并且用LOAD DATA INFILE ‘file_name‘ REPLACE ...恢復。為了避免重復記錄,在表中你需要一個(gè)PRIMARY KEY或UNIQUE鍵。當在唯一鍵值上一個(gè)新記錄與一個(gè)老記錄重復時(shí),REPLACE關(guān)鍵詞使得老記錄用一個(gè)新記錄替代。
MySQLdump工具很多方面類(lèi)似相反作用的工具M(jìn)ySQLimport。它們有一些同樣的選項。但MySQLdump能夠做更多的事情。它可以把整個(gè)數據庫裝載到一個(gè)單獨的文本文件中。這個(gè)文件包含有所有重建您的數據庫所需要的SQL命令。這個(gè)命令取得所有的模式(Schema,后面有解釋?zhuān)┎⑶覍⑵滢D換成DDL語(yǔ)法(CREATE語(yǔ)句,即數據庫定義語(yǔ)句),取得所有的數據,并且從這些數據中創(chuàng )建INSERT語(yǔ)句。這個(gè)工具將您的數據庫中所有的設計倒轉。因為所有的東西都被包含到了一個(gè)文本文件中。這個(gè)文本文件可以用一個(gè)簡(jiǎn)單的批處理和一個(gè)合適SQL語(yǔ)句導回到MySQL中。這個(gè)工具令人難以置信地簡(jiǎn)單而快速。決不會(huì )有半點(diǎn)讓人頭疼地地方。
因此,如果您像裝載整個(gè)數據庫Meet_A_Geek的內容到一個(gè)文件中,可以使用下面的命令:
bin/MySQLdump –p Meet_A_Geek > MeetAGeek_Dump_File.txt
這個(gè)語(yǔ)句也允許您指定一個(gè)表進(jìn)行dump(備份/導出/裝載?)。如果您只是希望把數據庫Meet_A_Geek中的表Orders中的整個(gè)內容導出到一個(gè)文件,可以使用下面的命令:
bin/MySQLdump –p Meet_A_Geek Orders >MeetAGeek_Orders.txt
這個(gè)非常的靈活,您甚至可以使用WHERE從句來(lái)選擇您需要的記錄導出到文件中。要達到這樣的目的,可以使用類(lèi)似于下面的命令:
bin/MySQLdump –p –where="Order_ID > 2000" Meet_A_Geek Orders > Special_Dump.txt
MySQLdump工具有大量的選項,部分選項如下表:
選項/Option 作用/Action Performed
--add-drop-table
這個(gè)選項將會(huì )在每一個(gè)表的前面加上DROP TABLE IF EXISTS語(yǔ)句,這樣可以保證導回MySQL數據庫的時(shí)候不會(huì )出錯,因為每次導回的時(shí)候,都會(huì )首先檢查表是否存在,存在就刪除
--add-locks
這個(gè)選項會(huì )在INSERT語(yǔ)句中捆上一個(gè)LOCK TABLE和UNLOCK TABLE語(yǔ)句。這就防止在這些記錄被再次導入數據庫時(shí)其他用戶(hù)對表進(jìn)行的操作
-c or - complete_insert
這個(gè)選項使得MySQLdump命令給每一個(gè)產(chǎn)生INSERT語(yǔ)句加上列(field)的名字。當把數據導出導另外一個(gè)數據庫時(shí)這個(gè)選項很有用。
--delayed-insert 在INSERT命令中加入DELAY選項
-F or -flush-logs 使用這個(gè)選項,在執行導出之前將會(huì )刷新MySQL服務(wù)器的log.
-f or -force 使用這個(gè)選項,即使有錯誤發(fā)生,仍然繼續導出
--full 這個(gè)選項把附加信息也加到CREATE TABLE的語(yǔ)句中
-l or -lock-tables 使用這個(gè)選項,導出表的時(shí)候服務(wù)器將會(huì )給表加鎖。
-t or -no-create- info
這個(gè)選項使的MySQLdump命令不創(chuàng )建CREATE TABLE語(yǔ)句,這個(gè)選項在您只需要數據而不需要DDL(數據庫定義語(yǔ)句)時(shí)很方便。
-d or -no-data 這個(gè)選項使的MySQLdump命令不創(chuàng )建INSERT語(yǔ)句。
在您只需要DDL語(yǔ)句時(shí),可以使用這個(gè)選項。
--opt 此選項將打開(kāi)所有會(huì )提高文件導出速度和創(chuàng )造一個(gè)可以更快導入的文件的選項。
-q or -quick 這個(gè)選項使得MySQL不會(huì )把整個(gè)導出的內容讀入內存再執行導出,而是在讀到的時(shí)候就寫(xiě)入導文件中。
-T path or -tab = path 這個(gè)選項將會(huì )創(chuàng )建兩個(gè)文件,一個(gè)文件包含DDL語(yǔ)句或者表創(chuàng )建語(yǔ)句,另一個(gè)文件包含數據。DDL文件被命名為table_name.sql,數據文件被命名為table_name.txt.路徑名是存放這兩個(gè)文件的目錄。目錄必須已經(jīng)存在,并且命令的使用者有對文件的特權。
-w "WHERE Clause" or -where = "Where clause "
如前面所講的,您可以使用這一選項來(lái)過(guò)篩選將要放到導出文件的數據。
假定您需要為一個(gè)表單中要用到的賬號建立一個(gè)文件,經(jīng)理要看今年(2004年)所有的訂單(Orders),它們并不對DDL感興趣,并且需要文件有逗號分隔,因為這樣就很容易導入到Excel中。 為了完成這個(gè)人物,您可以使用下面的句子:
bin/MySQLdump –p –where "Order_Date >=‘2000-01-01‘"
–tab = /home/mark –no-create-info –fields-terminated-by=, Meet_A_Geek Orders
這將會(huì )得到您想要的結果。
schema:模式The set of statements, expressed in data definition language, that completely describe the structure of a data base.
一組以數據定義語(yǔ)言來(lái)表達的語(yǔ)句集,該語(yǔ)句集完整地描述了數據庫的結構。
SELECT INTO OUTFILE :
如果您覺(jué)得MySQLdump工具不夠酷,就使用SELECT INTO OUTFILE吧, MySQL同樣提供一個(gè)跟LOAD DATA INFILE命令有相反作用的命令,這就是SELECT INTO OUTFILE 命令,這兩個(gè)命令有很多的相似之處。首先,它們有所有的選項幾乎相同?,F在您需要完成前面用MySQLdump完成的功能,可以依照下面的步驟進(jìn)行操作: 1. 確保MySQLd進(jìn)程(服務(wù))已經(jīng)在運行 SELECT * INTO OUTFILE ‘/home/mark/Orders.txt‘ 在你按了Return(回車(chē))之后,文件就創(chuàng )建了。這個(gè)句子就像一個(gè)規則的SELECT語(yǔ)句,只是把想屏幕的輸出重定向到了文件中。這意味這您可以使用JOIN來(lái)實(shí)現多表的高級查詢(xún)。這個(gè)特點(diǎn)也可以被用作一個(gè)報表產(chǎn)生器。 比方說(shuō),您可以組合這一章中討論的方法來(lái)產(chǎn)生一個(gè)非常有趣的查詢(xún),試試這個(gè): 在MySQL目錄建立一個(gè)名為Report_G.rpt 的文本文件,加入下面的行: USE Meet_A_Geek; 然后確認 MySQL進(jìn)程在運行,并且您在MySQL目錄中, 輸入下面的命令: bin/MySQL < Report_G.rpt檢查您命名作為輸出的文件,這個(gè)文件將會(huì )包含所有您在Customers表中輸入的顧客的姓。 如您所見(jiàn),您可以使用今天學(xué)到的導入/導出(import/export)的方法來(lái)幫助得到報表。
2. cd /usr/local/MySQL
3. bin/MySQLadmin ping ;// 如果這個(gè)句子通不過(guò),可以用這個(gè):MySQLadmin -u root -p ping
MySQLadmin ping用于檢測MySQLd的狀態(tài),is alive說(shuō)明正在運行,出錯則可能需要用戶(hù)名和密碼。
4. 啟動(dòng)MySQL 監聽(tīng)程序.
5. bin/MySQL –p Meet_A_Geek;// 進(jìn)入MySQL命令行,并且打開(kāi)數據庫Meet_A_Geek,需要輸入密碼
6. 在命令行中,輸入一下命令:
FIELDS
TERMINATED BY = ‘,‘
FROM Orders
WHERE Order_Date >= ‘2000-01-01‘
INSERT INTO Customers (Customer_ID, Last_Name, First_Name)
VALUES (NULL, "Kinnard", "Vicky");
INSERT INTO Customers (Customer_ID, Last_Name, First_Name)
VALUES (NULL, "Kinnard", "Steven");
INSERT INTO Customers (Customer_ID, Last_Name, First_Name)
VALUES (NULL, "Brown", "Sam");
SELECT Last_Name INTO OUTFILE ‘/home/mark/Report.rpt‘
FROM Customers WHERE Customer_ID > 1;
聯(lián)系客服