您好,登錄后才能下訂單哦!
下文給大家帶來MySQL導入格式化數據的簡單方法有關內容,相信大家一定看過類似的文章。我們給大家帶來的有何不同呢?一起來看看正文部分吧,相信看完MySQL導入格式化數據的簡單方法你一定會有所收獲。
在有些場景下,我們需要把一批特定格式的數據導入到mysql數據庫中,做法有很多,使用shell腳本、python都可以,今天來介紹兩個更便捷的命令,mysqlimport 和 load data
mysqlimport
使用方法
mysqlimport [options] db_name textfile1 [textfile2 ...] # db_name 對應數據庫名稱 # textfile 文件名,對應要插入的數據庫表名 # 比如:mysqlimport a8 campaign.txt 會把campaign.txt中的數據插入到a8數據庫中的campaign表
注意:campaign.txt文件必須在/usr/local/mysql/var/a8/目錄下,即數據庫所在目錄
如果不在對應的目錄下,會返回以下錯誤:
mysqlimport -uroot -p123456 -hlocalhost -P3306 a8 campaign.txt /usr/local/mysql/bin/mysqlimport: Error: File '/usr/local/mysql/var/a8/campaign.txt' not found (Errcode: 2), when using table: campaign
常用選項
--columns=id,name,creator... # 對應的數據表列名,定義被導入文件中的每一列對應的數據庫表列名 --fields-terminated-by= # 文件字段以什么分隔,參數為字符串,默認為\t --fields-enclosed-by= # 數據域用什么符號擴起來,默認為空,一般可以是雙引號、括號等 --fields-optionally-enclosed-by= # 數據域可以用什么符號括起來,因為為只有部分數據用這些符號括起來 --fields-escaped-by= # 轉義字符,參數為字符,默認為\ --lines-terminated-by= # 數據行以什么結束,參數為字符串,windows默認為\r\n --user=user_name 或 -u user_name --password=[password] 或 -p[password] --host=host_name 或 -h hostname --port=port_num,或 -P port_num # 定義用戶名、密碼、mysql云服務器地址和用于連接的TCP/IP端口號,默認為mysql默認端口3306 --ignore-lines=n # 忽視數據文件的前n行,因為很多數據文件前面有表頭 --delete -D # 在把文件中的數據插入前刪除表中原先的數據 --local -L # 指定從客戶端電腦讀入數據文件,否則從服務器電腦讀取 --lock-tables -l # 處理文本文件前鎖定所有表以便寫入,確保所有表在服務器上保持同步 --protocol={TCP | SOCKET | PIPE | MEMORY} 使用的連接協議 --force -f #忽視錯誤。例如,如果某個文本文件的表不存在,繼續處理其它文件,不使用--force,如果表不存在則mysqlimport退出 --compress -C # 壓縮在客戶端和服務器之間發送的所有信息(如果二者均支持壓縮) --silent,-s # 沉默模式,只有出現錯誤時才輸出 --socket=path,-S path # 當連接localhost時使用的套接字文件(為默認主機) --verbose,-v # 冗長模式。打印出程序操作的詳細信息。 --version,-V # 顯示版本信息并退出。
load data
使用方法
mysql> load data [low_priority] [local] infile 'file_name txt' [replace | ignore] into table tbl_name [fields] [terminated by '\t'] [OPTIONALLY] enclosed by ''] [escaped by '\' ]] [lines terminated by 'n'] [ignore number lines] [(id,name,creator)]
說明:
load data infile語句是將文本數據導入到數據表中。使用這個命令之前,mysqld進程(服務)必須已經在運行。使用前請確保有文件的讀取權限
1、如果你指定關鍵詞low_priority,那么MySQL將會等到沒有其他人讀這個表的時候,才把插入數據。可以使用如下的命令:
mysql> load data low_priority infile "/home/root/data.sql" into table campaign;
2、如果指定local關鍵詞,則表明從客戶主機讀文件。如果local沒指定,文件必須位于云服務器上。
3、replace和ignore關鍵詞控制對現有的唯一鍵記錄的重復的處理。如果你指定replace,新行將代替有相同的唯一鍵值的現有行。如果你指定ignore,跳過有唯一鍵的現有行的重復行的輸入。如果你不指定任何一個選項,當找到重復鍵時,出現一個錯誤,并且文本文件的余下部分被忽略。例如:
mysql> load data low_priority infile "/home/root/data.sql" replace into table campaign;
4、分隔符
1)fields關鍵字指定了文件字段的分割格式,如果用到這個關鍵字,MySQL剖析器希望看到至少有下面的一個選項:
terminated by:分隔符,字段是以什么字符作為分隔符 enclosed by:字段括起字符,例:` "周麗","10","學習很好" ` 這樣的一行,就需要這么寫 ` ENCLOSED BY '"' ` escaped by:轉義字符 lines terminated by:描述字段的分隔符,默認情況下是tab字符(\t) ignore number lines:用來忽略導入文件的開始的行。例如:number=1,則忽略導入文件的第一行數據。
例如:
mysql> load data infile "/home/root/data.sql" replace into table campaign fields terminated by',' enclosed by '"';
2)lines 關鍵字指定了每條記錄的分隔符默認為'n'即為換行符
如果兩個字段都指定了那fields必須在lines之前。如果不指定fields關鍵字缺省值和這樣寫是相同的:fields terminated by'\t' enclosed by ’ '' ‘ escaped by'\\'
如果你不指定一個lines子句,缺省值和這樣寫是相同的: lines terminated by'\n'
例如:
mysql> load data infile "/root/load.txt" replace into table test fields terminated by ',' lines terminated by '/n';
5、load data infile 可以按指定的列把文件導入到數據庫中。 當我們要把數據的一部分內容導入的時候,,需要加入一些欄目(列/字段/field)到MySQL數據庫中,以適應一些額外的需要。比方說,我們要從Access數據庫升級到MySQL數據庫的時候
下面的例子顯示了如何向指定的欄目(field)中導入數據:
mysql> load data infile "/home/root/campaign.txt" into table campaign(id, name, creator);
6、當在云服務器主機上尋找文件時,云服務器使用下列規則:
● 如果給出一個絕對路徑名,云服務器使用該路徑名。
● 如果給出一個有一個或多個前置部件的相對路徑名,云服務器相對云服務器的數據目錄搜索文件。
● 如果給出一個沒有前置部件的一個文件名,云服務器在當前數據庫的數據庫目錄尋找文件。
例如: /campaign.txt 是從云服務器的數據目錄讀取,而作為 campaign.txt 是從當前數據庫的數據庫目錄下讀取。
對于上文關于MySQL導入格式化數據的簡單方法,大家覺得是自己想要的嗎?如果想要了解更多相關,可以繼續關注我們的行業資訊板塊。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。