1

LOAD DATA INFILEを使用する場合、重複する行にフラグを立てる方法、または一部またはすべての重複を別のテーブルにダンプする方法はありますか?

4

2 に答える 2

14
于 2009-12-27T02:58:46.880 に答える
4

LOAD DATA呼び出しの行を複製する場合、実際にできることがあるよう見えます。ただし、私が見つけたアプローチは完全ではありません。LOADDATA呼び出しだけでなく、テーブルのすべての削除のログとして機能します。これが私のアプローチです:

テーブルテスト

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 に答える