LOAD DATA INFILEを使用する場合、重複する行にフラグを立てる方法、または一部またはすべての重複を別のテーブルにダンプする方法はありますか?
質問する
19035 次
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 に答える