mysql11导入数据_MySQL专题11之MySQL导出数据、MySQL导入数据
1、MySQL導(dǎo)出數(shù)據(jù)
- ?MySQL中你可以使用SELECT...INTO OUTFILE語句來簡單的導(dǎo)出數(shù)據(jù)到文本文件中。
a、使用SELECT...INTO OUTFILE
- ?以下實(shí)例中我們將數(shù)據(jù)庫runoob_tbl數(shù)據(jù)導(dǎo)出到/tmp/tutorials.txt文件中:mysql>?SELECT?*?FROM?runoob_tbl
->?INTO?OUTFILE?'/tmp/tutorials.txt';
- ?你可以通過命令選項(xiàng)來設(shè)置數(shù)據(jù)輸出的指定格式,以下實(shí)例為導(dǎo)出CSV格式:mysql>?SELECT?*?FROM?passwd?INTO?OUTFILE?'/tmp/tutorials.txt'
->?FIELDS?TERMINATED?BY?','?ENCLOSED?BY?'"'
->?LINES?TERMINATED?BY?'\r\n';
- ?在下面的例子中,生成一個文件,各值用逗號隔開。這種格式可以被許多程序使用。SELECT?a,b,a+b?INTO?OUTFILE?'/tmp/result.text'
FIELDS?TERMINATED?BY?','?OPTIONALLY?ENCLOSED?BY?'"'
LINES?TERMINATED?BY?'\n'
FROM?test_table;
- ?SELECT ...INTO OUTFILE語句有以下屬性:
- ?LOAD DATA INFILE是SELECT ... INTO OUTFILE的逆操作,SELECT句法。為了將數(shù)據(jù)庫的數(shù)據(jù)寫入一個文件中,使用SELECT ...INTO OUTFILE,為了將文件讀回?cái)?shù)據(jù)庫,使用LOAD DATA INFILE。
- ?SELECT ...INTO OUTFILE 'file_name"形式的SELECT可以把被選擇的行寫入到一個文件中。該文件被創(chuàng)建到服務(wù)器主機(jī)上,因此你必須擁有FILE權(quán)限,才能使用此語法。
- ?輸出不能是一個已經(jīng)存在的文件,防止文件數(shù)據(jù)被篡改。
- ?你需要有一個登陸服務(wù)器的賬號來檢索文件,否則SELECT ...INTO OUTFILE不會起任何作用。
- ?在UNIX中,該文件被創(chuàng)建后是可讀的,權(quán)限由MySQL服務(wù)器所擁有。這意味著,雖然你可以讀取該文件,但是可能無法將其刪除。
b、導(dǎo)出表作為原始數(shù)據(jù)
- ?mysqldump是mysql用于轉(zhuǎn)存儲數(shù)據(jù)庫的實(shí)用程序。它主要產(chǎn)生一個SQL腳本,其中包含從頭重新創(chuàng)建數(shù)據(jù)庫所必需的命令CREATE TABLE INSERT等。
- ?使用mysqldump導(dǎo)出數(shù)據(jù)需要使用--tab選項(xiàng)來指定導(dǎo)出文件指定的目錄,該目標(biāo)必須是可寫的。
- ?以下實(shí)例將數(shù)據(jù)表runoob_tbl導(dǎo)出到/tmp目錄中:$?mysqldump?-u?root?-p?--no-create-info?\
--tab=/tmp?RUNOOB?runoob_tbl
password?******
c、導(dǎo)出SQL格式的數(shù)據(jù)
- ?導(dǎo)出SQL格式的數(shù)據(jù)到指定文件,如下所示:$?mysqldump?-u?root?-p?RUNOOB?runoob_tbl?>?dump.txt
password?******
- ?以上命令創(chuàng)建的文件內(nèi)容如下:--?MySQL?dump?8.23
--
--?Host:?localhost????Database:?RUNOOB
---------------------------------------------------------
--?Server?version???????3.23.58
--
--?Table?structure?for?table?`runoob_tbl`
--
CREATE?TABLE?runoob_tbl?(
runoob_id?int(11)?NOT?NULL?auto_increment,
runoob_title?varchar(100)?NOT?NULL?default?'',
runoob_author?varchar(40)?NOT?NULL?default?'',
submission_date?date?default?NULL,
PRIMARY?KEY??(runoob_id),
UNIQUE?KEY?AUTHOR_INDEX?(runoob_author)
)?TYPE=MyISAM;
--
--?Dumping?data?for?table?`runoob_tbl`
--
INSERT?INTO?runoob_tbl
VALUES?(1,'Learn?PHP','John?Poul','2007-05-24');
INSERT?INTO?runoob_tbl
VALUES?(2,'Learn?MySQL','Abdul?S','2007-05-24');
INSERT?INTO?runoob_tbl
VALUES?(3,'JAVA?Tutorial','Sanjay','2007-05-06');
- ?如果你需要導(dǎo)出整個數(shù)據(jù)庫的數(shù)據(jù),可以使用以下命令:$?mysqldump?-u?root?-p?RUNOOB?>?database_dump.txt
password?******
- ?如果你需要備份所有數(shù)據(jù)庫,可以使用以下命令:$?mysqldump?-u?root?-p?--all-databases?>?database_dump.txt
password?******
- ?--all-databases選項(xiàng)在MySQL3.23.12以及以后版本中加入。(該方法可用于實(shí)現(xiàn)數(shù)據(jù)庫的備份策略)
d、將數(shù)據(jù)表以及數(shù)據(jù)庫拷貝至其他主機(jī)
- ?如果你需要將數(shù)據(jù)拷貝至其他的MySQL服務(wù)器上,你可以在mysqldump命令中指定數(shù)據(jù)庫名以及數(shù)據(jù)表。
- ?在源主機(jī)上執(zhí)行以下命令,將數(shù)據(jù)備份至dump.txt文件中。$?mysqldump?-u?root?-p?database_name?table_name?>?dump.txt
password?*****
- ?如果完整備份數(shù)據(jù)庫,則無需使用特定的表名稱。
- ?如果你需要將備份的數(shù)據(jù)庫導(dǎo)入到MySQL服務(wù)器中,可以使用以下命令,使用以下命令你需要確認(rèn)數(shù)據(jù)庫已經(jīng)創(chuàng)建:$?mysql?-u?root?-p?database_name?
password?*****
- ?你也可以使用以下命令將導(dǎo)出的數(shù)據(jù)直接導(dǎo)入到遠(yuǎn)程的服務(wù)器上,但是請確保兩臺服務(wù)器是相通的,是可以相互訪問的:$?mysqldump?-u?root?-p?database_name?\
|?mysql?-h?other-host.com?database_name
- ?以上命令中使用了管道來將導(dǎo)出的數(shù)據(jù)導(dǎo)入到指定的遠(yuǎn)程主機(jī)上。
2、MySQL導(dǎo)入數(shù)據(jù)
- ?MySQL中可以使用兩種簡單的方式來導(dǎo)入MySQL導(dǎo)出的數(shù)據(jù)。
a、使用LOAD DATA導(dǎo)入數(shù)據(jù)
- ?MySQL中提供了LOAD DATA INFILE語句來插入數(shù)據(jù)。以下實(shí)例中將從當(dāng)前目錄中讀取文件dump.txt,將該文件中的數(shù)據(jù)插入到當(dāng)前數(shù)據(jù)庫的mytbl表中。mysql>?LOAD?DATA?LOCAL?INFILE?'dump.txt'?INTO?TABLE?mytbl;
- ?如果指定LOCAL關(guān)鍵詞,則表明從客戶主機(jī)上按路徑讀取文件。如果沒有指定,則文件在服務(wù)器上按路徑讀取文件。你能明確地在LOAD DATA語句中指出列值的分隔符和行尾標(biāo)記,但是默認(rèn)標(biāo)記是定位符和換行符。
- ?兩個命令的FIELDS和LINES子句的語法是一樣的。兩個子句都是可選的,但是如果兩個同時被指定,FIELDS子句必須出現(xiàn)在LINES子句之前。
- ?如果用戶指定一個FILED子句,它的子句(TERMINATED BY、[OPTIONALLY] ENCLOSED BY 和 ESCAPED BY)也是可選的,不過,用戶必須至少指定它們中的一個。mysql>?LOAD?DATA?LOCAL?INFILE?'dump.txt'?INTO?TABLE?mytbl
->?FIELDS?TERMINATED?BY?':'
->?LINES?TERMINATED?BY?'\r\n';
- ?LOAD DATA默認(rèn)情況下是按照數(shù)據(jù)文件中列的順序插入數(shù)據(jù)的,如果數(shù)據(jù)文件中的列與插入表中的類不一致,則需要指定列的順序。
- ?如,在數(shù)據(jù)文件中的列順序是a,b,c,但是在插入表的列順序是b,c,a,則數(shù)據(jù)導(dǎo)入語法如下:mysql>?LOAD?DATA?LOCAL?INFILE?'dump.txt'
->?INTO?TABLE?mytbl?(b,?c,?a);
b、使用mysqlimport導(dǎo)入數(shù)據(jù)
- ?mysqlimport客戶端提供了LOAD DATA INFILEQL語句的一個命令行接口。mysqlimport的大多數(shù)選項(xiàng)直接對應(yīng)LOAD DATA INFILE子句。
- ?從文件dump.txt中將數(shù)據(jù)導(dǎo)入到mysql數(shù)據(jù)表中,可以使用以下命令:$?mysqlimport?-u?root?-p?--local?database_name?dump.txt
password?*****
- ?mysqlimport命令可以指定選項(xiàng)來設(shè)置指定格式,命令語句格式如下:$?mysqlimport?-u?root?-p?--local?--fields-terminated-by=":"?\
--lines-terminated-by="\r\n"??database_name?dump.txt
password?*****
- ?mysqlimport語句中使用--columns選項(xiàng)來設(shè)置列的順序:$?mysqlimport?-u?root?-p?--local?--columns=b,c,a?\
database_name?dump.txt
password?*****
- ?mysqlimport的常用選項(xiàng)介紹:選項(xiàng)功能
-d or --delete新數(shù)據(jù)導(dǎo)入數(shù)據(jù)表中之前刪除數(shù)據(jù)數(shù)據(jù)表中的所有信息
-f or --force不管是否遇到錯誤,mysqlimport將強(qiáng)制繼續(xù)插入數(shù)據(jù)
-i or --ignoremysqlimport跳過或者忽略那些有相同唯一關(guān)鍵字的行, 導(dǎo)入文件中的數(shù)據(jù)將被忽略。
-l or -lock-tables數(shù)據(jù)被插入之前鎖住表,這樣就防止了,你在更新數(shù)據(jù)庫時,用戶的查詢和更新受到影響。
-r or -replace這個選項(xiàng)與-i選項(xiàng)的作用相反;此選項(xiàng)將替代表中有相同唯一關(guān)鍵字的記錄。
--fields-enclosed- by= char指定文本文件中數(shù)據(jù)的記錄時以什么括起的, 很多情況下數(shù)據(jù)以雙引號括起。 默認(rèn)的情況下數(shù)據(jù)是沒有被字符括起的。
--fields-terminated- by=char指定各個數(shù)據(jù)的值之間的分隔符,在句號分隔的文件中,分隔符是句號。您可以用此選項(xiàng)指定數(shù)據(jù)之間的分隔符。默認(rèn)的分隔符是跳格符(Tab)
--lines-terminated- by=str此選項(xiàng)指定文本文件中行與行之間數(shù)據(jù)的分隔字符串或者字符。 默認(rèn)的情況下mysqlimport以newline為行分隔符。您可以選擇用一個字符串來替代一個單個的字符:一個新行或者一個回車。
總結(jié)
以上是生活随笔為你收集整理的mysql11导入数据_MySQL专题11之MySQL导出数据、MySQL导入数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在c语言中039是不是int型,C数据类
- 下一篇: MySQL事务及字符集介绍