使用 LOAD DATA INFILE 时,有没有办法标记重复行,或将任何/所有重复项转储到单独的表中?
问问题
19035 次
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,asdf
、1,tyui
和2,jkl
被添加到日志表中。基于时间戳,可以将行与特定LOAD DATA
语句相关联。
于 2010-03-02T02:53:34.323 回答