1

使用 LOAD DATA INFILE 时,有没有办法标记重复行,或将任何/所有重复项转储到单独的表中?

4

2 回答 2

14
于 2009-12-27T02:58:46.880 回答
4

当涉及到 LOAD DATA 调用的重复行时,您似乎可以做一些事情。但是,我发现的方法并不完美:它更多地充当表上所有删除的日志,而不仅仅是 LOAD DATA 调用。这是我的方法:

测试

CREATE TABLE test (
    id INTEGER PRIMARY KEY,
    text VARCHAR(255) DEFAULT NULL
);

test_log

CREATE TABLE test_log (
    id INTEGER, -- not primary key, we want to accept duplicate rows
    text VARCHAR(255) DEFAULT NULL,
    time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

触发del_chk

delimiter //
drop trigger if exists del_chk;
CREATE TRIGGER del_chk AFTER DELETE ON test
FOR EACH ROW
BEGIN
    INSERT INTO test_log(id,text) values(OLD.id,OLD.text);
END;//
delimiter ;

测试导入(/home/user/test.csv):

1,asdf
2,jkl
3,qwer
1,tyui
1,zxcv
2,bnm

询问:

LOAD DATA INFILE '/home/ken/test.csv'
REPLACE INTO TABLE test 
FIELDS 
    TERMINATED BY ','
LINES
    TERMINATED BY '\n' (id,text);

运行上述查询将导致1,asdf1,tyui2,jkl被添加到日志表中。基于时间戳,可以将行与特定LOAD DATA语句相关联。

于 2010-03-02T02:53:34.323 回答