1、load data local命令使用方法
不指定欄位名
此寫法資料檔案內欄位數必須跟資料庫表一致
load data local infile "C:\\test.txt" into table tableName CHARACTER SET gbk fields terminated by '|' LINES TERMINATED by '\n';
自定義列匯入(推薦使用)
在生產環境中推薦使用自定義列匯入,這樣如果是不需要的欄位,就可以不接這個欄位內容,這樣就不必改表結構,還可以做成資料庫配置等進行維護,
//不需要的列直接用@過濾掉就可以了(可以使用同一個變數名比如@a,或者使用我下面不同的變數名加上@符號)
//不需要的列的列名可以隨便定義,但是沒有加@符的需要跟資料庫表欄位名一一對應,
// 不需要的列也需要跟資料檔案中的欄位一一對應,類似于占個坑,但是不進行資料系結,
load data local infile "C:\\test.txt" into table tableName CHARACTER SET gbk fields terminated by '|' LINES TERMINATED by '\n' (c1,@2,c3,@4, c5,@6,c7,@8,c9,@10);
// set命令可以設定默認值,可以直接賦值, 也可以使用if判斷,跟update 差不多,
load data local infile "C:\\test.txt" into table tableName CHARACTER SET gbk fields terminated by '|' LINES TERMINATED by '\n' (c1,c2,c3,c4,c5,c6,c7,c8,c9,c10) set c1 = '1', c9=if(c9='0000-00-00',now(),c9)
資料檔案資料樣例
1|test|3|tmp|5
6|string|8|a|10
2、命令決議
infile "C:\\test.txt" // 這是你的資料檔案存放的位置 最好使用雙引號和使用轉義符進行路徑轉義
into table tableName // 這是你資料庫的表名
CHARACTER SET gbk // 這是以什么字符編碼讀取你的資料檔案,當你的檔案和資料庫不對應的時候需要設定(對應的話就不需要),當你的資料檔案是gbk的時候你需要設定成gbk,
fields terminated by '|' // 這個是你的資料檔案欄位是以什么方式進行分割的,這個是以豎線分割
LINES TERMINATED by '\n' // 這個是你的資料檔案一條資料是以什么方式區分的,這里是以換行進行區分的,
(c1,c2,c3,c4,c5,c6,c7,c8,c9,@c10) // 指定列匯入,跟資料庫表欄位對應,不需要的列加@符占個坑位,不需要的列名可隨便定義,需要的列名跟資料庫欄位對應,
set c1 = '1', c9=if(c9='0000-00-00',now(),c9) // 給匯入的資料設定值,這里判斷的值是匯入后的值,比如這個例子是當一個時間型別的資料時在資料檔案里是個空的時候匯入到表中對應是個0000-00-00 而不是null,所以這里要用0000-00-00,而不是"",
3、注意事項
- 匯入的列不會為null 始侄訓有一個默認值,
- 當資料檔案為null的時候如果你的欄位型別是int型別,那么匯入的值會為0,
- 如果是double型別,那么匯入的就會為0.0資料庫保留幾位小數,則帶幾位小數
- 如果是varcher型別,則是空字串
- 最重要的一點,在資料庫版本為5.*的版本,會有一個默認時間的bug,當你時間格式為null 的時候,資料庫會默認幫你填充0000-00-00 然而這個時間不合法的,假如你需要查到java 中是無法進行系結的,而且資料庫也不認這個時間,假如你要復制這條資料到另外一個表中,是無法插入的,所以在這里建議大家時間設定成varchar型別,或者在load 的時候進行判斷把這個時間替換掉,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/169845.html
標籤:其他
上一篇:前后端分離專案:優學專案實訓部署
下一篇:長難句3
