2016-06-28 42 views
1

データベースに「Testing」という名前があります。今は古い+新しいデータを持っている新しいダンプファイルから "テスト"データベースにデータを復元する必要があります。古いデータを複製することなく、新しいデータのみをデータベースに復元したい。差分mysqlダンプを復元するには

に(行数の主キー)私のテーブル構造を

は(How to use mysqldump for a portion of a table?)表の部分のバックアップを取り、それを復元しようとしたが、IDのような何列が私のテーブルではありませんので、それがうまくdid'tこのようなものです

A    | B   | C  | D  | E  | 
+---------------+------------+---------+-------+---------+ 
| 1432550740000 |  111004 | 10000 |  2 | 9690001 | 
| 1432550790000 |  123001 | 10000 |  2 | 9690001 | 
| 1432550340000 | 44440215 | 10000 |  2 | 9690001 | 
| 1432550450000 | 125400054 | 10000 |  2 | 9690001 | 
| 1432551444000 | 43459067 | 10000 |  2 | 9690001 | 
+---------------+------------+---------+-------+---------+ 

誰もが私にこれを案内できますか?

+0

どのデータをバックアップするかはどのように決定しますか?クエリを書くためにidフィールドは必要ありません。予想される結果セットを提供している有効なSQLが(SELECT .. INTO OUTFILE ..を使用することができれば)トリックを行うべきです。 – Philipp

+0

@Philipp私は古いテーブルの行数に基づいて決定します。たとえば、古いテーブルがX行からなる場合、新規ダンプはX + Y行を持ちます。その中で私はY行を復元したい。 – Vidya

+0

ああ、新しいデータだけでダンプを作成するのはすでに遅すぎますか? – Philipp

答えて

0

新しいテーブル(古いテーブルと同じ構造)を作成して古いデータと新しいデータのデータをこのテーブルにダンプすることができます。

次に、他のテーブルにすでに存在する新しいデータから行を削除できます。 (理想的には、あなたの新しい値を識別するために、あなたのデータで何かを持っていますが、クエリを自分で書くならば、それはまた、制限で動作します)

DELETE FROM newTable WHERE `identifier` IN (SELECT `identifier` FROM oldTable); 
DELETE FROM newTable LIMIT 12; -- deletes first 12 entries 

今、あなただけの新しいテーブルに新しいデータを持っています。その後、古いテーブルを切り捨てて、新しいデータを古いテーブルに挿入することができます。

そして、新しいテーブルを切り捨てたり、空にしたり、削除したりすることはできません。もう必要ありません。

+0

1.識別子に基づいてデータを削除する: これは、少なくとも1つのユニークな列がある場合にのみ、新しいデータテーブル..itsが有用になります。/(私の中にユニークな列はありません)..... 2.制限を使用して削除: 新しいテーブルから古いテーブルレコードを削除するのは良いですが、解決策としてこれを使用することはできません。なぜなら、古いテーブルデータも変更された場合、これを使用して新しいデータを削除する可能性があるからです。(チャンスはあります).... ソリューション、私は同じデータベース内の新しいダンプファイルを使用してデータを復元する場合は、古いテーブル自体(重複していない)で来るX + Yレコードを "テスト" .... あなたの指導のためにあまりにもありがとう。 – Vidya

関連する問題