2012-02-27 63 views
2

我正在將大型數據集(60個演出)加載到數據庫中。有些記錄可以跳過,因爲它們包含缺少的值。如何告訴MySQL跳過包含某些(在這種情況下缺少)值的行?例如,我的文件看起來像這樣有條件地忽略行加載數據mysql

Value1, Value2 
1,2 
3,4 
,5 
9,10 

第三行可以跳過並且不加載。我知道我可以加載所有內容,然後刪除它,但處理60 gig文件需要很長時間,所以我想節省計算能力。

感謝

+0

你是如何加載數據觸發? – 2012-02-27 05:27:56

+0

我正在使用load data命令加載 – Alex 2012-02-27 21:30:48

回答

1

創建於上檢查,如果特定字段爲空

CREATE TRIGGER before_insert_test 
BEFORE INSERT ON test FOR EACH ROW 
BEGIN 
    -- condition to check 
    IF NEW.Value1 is null THEN 
     set msg = concat('MyTriggerError: Trying to insert a null value 
        in trigger_test: ', cast(new.Value1 as char)); 
    signal sqlstate '45000' set message_text = msg; 
    END IF; 
END$$ 

然後運行您的負載數據命令表插入之前

+0

謝謝你的回答,你能解釋一下觸發器的作用嗎?我不熟悉這個概念。非常感謝您的幫助。 – Alex 2012-02-27 21:32:49

+0

上面的觸發器會在每個插入表之前檢查,如果值爲null,則不插入行。 – 2012-02-28 05:07:18

+0

這似乎不適合我;而不是我的行插入;我發佈了這個問題; http://stackoverflow.com/questions/28595441/mysql-trigger-to-skip-certain-rows-during-load – user1420372 2015-02-18 22:47:51

5

如果「值1」是一個獨特的領域,那麼你可以用忽略選項發揮。例如:

CREATE TABLE table1(
    Value1 INT(11) NOT NULL, 
    Value2 INT(11) DEFAULT NULL, 
    PRIMARY KEY (Value1) 
); 

LOAD DATA INFILE 'file.txt' 
    IGNORE -- forces to ingore existed records 
    INTO TABLE table1 
    FIELDS TERMINATED BY ',' 
    LINES TERMINATED BY '\r\n' 
    IGNORE 1 lines 
    (@var1, Value2) 
    SET Value1 = IF(@var1 = 0, 1, @var1) 

'IF(@ VAR1 = 0,1,@ VAR1)' 幫助我們改變缺失值 '0' 與存在KEY值 '1',這些記錄將被忽略。

+0

聰明的解決方案!謝謝。 – Alex 2012-02-27 21:32:20