1. 程式人生 > >MySQL入門教程系列一----表的匯出與匯入

MySQL入門教程系列一----表的匯出與匯入

1.表的匯出

有時需要將MySQL資料庫的資料匯出到外部儲存檔案中,MySQL資料庫中的資料可以匯出成sql文字檔案,xml檔案或者html檔案,同樣這些匯出的檔案也可以匯入MySQL資料庫中,

1.1用SELECT…INTO OUTFILE匯出檔案

MySQL資料庫在匯出資料時,允許使用包含匯出定義的SELECT語句進行資料的匯出操作,該檔案在伺服器主機上建立,因此,必須擁有檔案寫入許可權(FILE 許可權),才能使用。其基本語法格式如下:

SELECT columnlist FROM table WHERE condition INTO OUTFILE 'filename'
[OPTIONS] --OPTIONS 選項 FIELDS TERMINATED BY 'value' FIELDS [OPTIONALLY] ENCLOSED BY 'value' FIELDS ESCAPED BY 'value' LINES STARTING BY 'value' LINES TERMINATED BY 'value'

可以看到SELECT columnlist FROM table WHERE condition為查詢語句;INTO OUTFILE ‘filename’的作用就是把SELECT語句查詢的結果匯出到名為filename的外部檔案中,filename不能是一個已經存在的檔案。[OPTIONS]為可選引數項,OPTIONS部分的語法包括FIELDS和LINES子句,其可能的取值介紹如下:

  1. FIELDS TERMINATED BY ‘value’:設定欄位之間的分隔符,可以為單個或多個字元,預設情況為製表符“\t”。
  2. FIELDS [OPTIONALLY] ENCLOSED BY ‘value’:設定欄位的包圍字元,只能為單個字元,如果使用了OPTIONALLY則只包括CHAR和VARCHAR等字元資料欄位。
  3. FIELDS ESCAPED BY ‘value’:設定如何寫入或者讀取特殊字元,只能為單個字元,即設定轉義字元,預設值為“\”。
  4. LINES STARTING BY ‘value’:設定每行資料開頭的字元,可以為單個或多個字元,預設情況下不使用任何字元。
  5. LINES TERMINATED BY ‘value’:設定每行資料結尾的字元,可以為單個或者多個字元,預設值為“\n”。

FIELDS和LINES兩個子句都是自選的,但是如果兩個都被指定了,FIELDS必須位於LINES前面。
示例:

SELECT * FROM test.person INTO OUTFILE “c:\person0.txt”;

1.2 使用mysqldump命令匯出文字檔案

使用mysqldump工具不僅可以把資料匯出為包含CREATE,INSERT的sql檔案,也可以匯出為純文字檔案。
Mysqldump將建立一個包含CREATE TABLE語句的tablename.sql檔案和一個包含其資料的tablename.txt檔案。Mysqldump匯出檔案的基本語法格式如下:

Mysqldump –T path-u root –p dbname [table]  [OPTIONS]
--OPTIONS
--fields-terminated-by=value
--fields-enclosed-by=value
--fields-optionally-enclosed-by=value
--fields-escaped-by=value
--lines-terminated-by=value

只有指定了-T引數才可以匯出純文字檔案;path表示匯出資料的目錄:tables為指定要匯出的表名稱,如果不指定,將匯出資料庫dbname中所有的表;[OPTIONS]為可選引數,這些引數要結合引數T使用;
OPTIONS常用的取值如下:
–fields-terminated-by=value:設定欄位之間的分割字元,預設為“\t”;
–fields-enclosed-by=value;設定欄位的包圍字元;
–fields-optionally-enclosed-by=value;設定欄位的包圍字元,只能為單個字元,只能包括CHAR和VARCHAR等字元資料欄位
–fields-escaped-by=value:控制如何寫入或讀取特殊字元,只能為單個字元,即設定轉義字元,預設為反斜線“\”
–fields-terminated-by=value: 控制每行資料結尾的字元,可以為單個或多個字元,預設為“\n”;

示例:

Mysqldump  –T c:\test person –u root –p

以上命令執行成功後,會在C盤建立兩個檔案,person.sql和person.txt。其中,person.sql包含建立person表的CREATE語句;

2.表的匯入

2.1使用LOAD DATA INFILE方式匯入文字檔案

LOAD DATA 語句用於高速的從一個文字檔案中讀取行,並裝入一個表中,檔名稱必須為字串。語法格式如下:

LOAD DATA INFILE ‘filename.txt’ INTO TABLE tablename [OPTIONS] [IGNORE number LINES]
--OPTIONS 選項
FIELDS TERMINATED BU ‘VALUE’
FIELDS [OPTIONALLY] ENCLOSED BYVALUE’
FIELDS ESCAPED BYVALUE’
LINES STARTING BYVALUE’
LINES TERMINATED BYVALUE

可以看到INFILE後面的filename檔案為匯入資料的來源;tablename表示待匯入的資料表的名稱;[OPTIONS]為可選引數選項,包含FIELDS和LINES子句,其可能取值如下:

FIELDS TERMINATED BU ‘VALUE’:設定欄位之間的分割字元,預設為“\t”;
FIELDS [OPTIONALLY] ENCLOSED BY ‘VALUE’;設定欄位的包圍字元,只能為單個字元,只能包括CHAR和VARCHAR等字元資料欄位;
FIELDS ESCAPED BY ‘VALUE’: 控制如何寫入或讀取特殊字元,只能為單個字元,即設定轉義字元,預設為反斜線“\”;
LINES STARTING BY ‘VALUE’設定每行字元的開頭字元,可以為單個或多個字元,預設不使用;
LINES TERMINATED BY ‘VALUE’:設定每行資料結尾的字元,可以為單個或多個字元,預設為“\n”;
IGNORE number LINES表示忽略檔案開始處的行數,執行LOAD DATA語句需要FILE許可權。

示例:

LOAD DATA INFILE ‘C:\person.txt’ INTO TABLE test.person

2.2使用mysqlimport命令匯入文字檔案

使用mysqlimport語句需要指定所需的選項,匯入的資料庫名稱以及匯入的資料檔案的路徑和名稱。Mysqlimport命令的基本語法格式如下:

Mysqlimport –u root –p dbname filename.txt [OPTIONS]
--OPTIONS選項
--fields-terminated-by=value
--fields-enclosed-by=value
--fields-optionally-enclosed-by=value
--fields-escaped-by=value
--lines-terminated-by=value
--ignore-lines=n

–fields-terminated-by=value:設定欄位之間的分隔字元,可以為單個或多個字元,預設為“\t”;
–fields-enclosed-by=value設定欄位的包圍字元;
–fields-optionally-enclosed-by=value設定欄位的包圍字元,只能為單個字元,包括CHAR和VARCHAR等欄位的包圍字元;
–fields-escaped-by=value:控制如何寫入或讀取特殊字元,只能為單個字元,即設定轉義字元,預設為反斜線“\”;
–lines-terminated-by=value設定每行資料結尾的字元,可以為單個或多個字元,預設為“\n”;
–ignore-lines=n忽略資料的前N行;


除了前面介紹的幾個選項之外,mysqlimport還支援許多選項,由於不常用這些選項,不再介紹。