Access 數據導入mysql

從Access中提取若幹信息,導入到mysql中。


 


 嗯,多簡單的事呀。。。不過是SQL語句的導入導出嘛。。。我開始真的是這麼想的。。。


 


 做的時候發現,Access沒有導出SQL的功能,不想用第三方的東西。。。


 


 這裡簡單描述下我是怎麼做的吧!


 


 1、在access中建個視圖,得到自己想要的數據;


 


 2、把這個視圖查詢到的數據,導出成文本格式,我用的是CVS;


 


 3、用文本編輯器,把導出的數據 處理成 SQL語句(多虧瞭vim,用其他編輯器都不知道怎麼辦才好,打開都成問題,更不用說快速編輯瞭。。。UE打開後,滾輪都滾不動的說。。。);


 


 4、用mysql命令,導入mysql。


 


 思路很清晰,我就這麼做瞭。直到最後一步,才發現問題:數據量太大(68萬條),這一步很慢很慢。


 


 慢也就罷瞭,隻做一次(等瞭我近2個小時),沒什麼關系。。。可是,馬上發現,數據中時間格式不對。比如Access中是2011-1-1,而mysql這邊,期望得到的是2011-01-01,就這一個時間,要改動幾十萬條記錄,還不如重新導一份新的呢。。。


 


 於是,重復步驟2,得到數據。


 


 因為導入過程慢的實在太離譜瞭,就找瞭個mysqldump 備份出來的文件來看,看一看mysql官方覺得怎樣導入數據會更快,於是發現瞭諸如下面的內容:


 



Sql代碼 
LOCK TABLES `tablename` WRITE;  
ALTER TABLE `tablename` DISABLE KEYS;  
INSERT INTO `tablename` (id,name,password) VALUES   
— 這裡是數據  
;  
ALTER TABLE `tablename`ENABLE KEYS;  
UNLOCK TABLES; 


LOCK TABLES `tablename` WRITE;
ALTER TABLE `tablename` DISABLE KEYS;
INSERT INTO `tablename` (id,name,password) VALUES
— 這裡是數據
;
ALTER TABLE `tablename`ENABLE KEYS;
UNLOCK TABLES;
 


 很明顯,這裡的SQL從3個方面做瞭優化:


 


 1、加瞭隻寫的鎖(解鎖之前,不能查詢,同時索引 可以最後做,插入數據 就會快啦);


 


 2、Disable瞭所有鍵(於是,就不用再做外鍵檢查瞭,全心插入數據);


 


 3、insert into 用一條語句完成(一條語句 和 金條語句 的性能,差別不是一般的大啊,想想也覺得是。。。)。


 


 


 這樣之後,幾分鐘就能搞定。


 


 


 另外,說一點文本處理的。。。


 


 一開始,習慣性的,要寫成一條一條的SQL,於是想到瞭用宏來做。宏很簡單,小數據量非常方便,不用大腦怎麼思考。但是,做瞭一會,發現實在太慢瞭,大數據量,處理不瞭。


 


 我平時很少寫vim腳本,現在想來,用腳本也會很慢,畢竟要一行行的執行呀。。。


 


 於是乎,寫正則,查找替換。很快,幾秒鐘搞定一次替換。正則的威力,真不是一般的強大啊。。。上面說的時間格式的轉換,也是在這裡做的。


 


 註意:即使你的文本很好看,可以試試列編輯。一般行首適用,後面 幾乎都不可用瞭。。。


 


 這裡要說的是,不要把多行數據變成一行,沒這個必要。變成一行後,可讀性會變的很差,文本處理會變的非常的慢。如果一行匹配的次數過多,用g這個參數,往往會很慢。。。


 


 


 就說這些吧。。。


 


 重新理瞭下思路。。。


 


 下次估計10分鐘就能搞定這樣的事。。。


 

發佈留言