• ベストアンサー

Mysqlで2つのtable間のデータ移動は可能ですか?

Mysqlのデータベースに2つの全く同じ構造のテーブル(table1とtable2)があります。phpを介してtable1のデータを一件づつ手動でtable2に移動したいのですが、どのような方法がありますか? それ以前の問題として、2つのtable間でデータを移動できるものなのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

> 一度の処理でinsertとdeleteができれば便利なのですが。 PostgreSQL等では複数クエリの発行が出来ますが、MySQLのmysql_query()ではサポートしていないようです。 http://jp.php.net/manual/ja/function.mysql-query.php こんな感じで関数でも作っておけば特に面倒は無い気がしますが。 function moveTable($id){ $rs = mysql_query("INSERT INTO table2 SELECT * FROM table1 WHERE id={$id}"); if($rs){ $rs2 = mysql_query("DELETE FROM table1 WHERE id={$id}"); if($rs2){ return TRUE; }else{ return FALSE; } }else{ return FALSE; } } なお、InnoDBで作成したテーブルならトランザクションにも対応しているので、より確実になりますね。 参考まで。

yes87
質問者

お礼

度々どうもありがとうございます。 教えて頂いたとおりで動きました。 ありがとうございました。

その他の回答 (1)

回答No.1

> それ以前の問題として、2つのtable間でデータを移動できるものなのでしょうか? 移動というのは、コピー&元データ削除の事です。 たとえば、id=hogeのデータをコピーする時は、 INSERT INTO table2 SELECT * FROM table1 WHERE id=hoge のクエリを実行すれば簡単にコピー出来ます。その後、 DELETE FROM table1 WHERE id=hoge とすればtable1のデータが削除出来ますので、移動完了となります。 例えばデータをチェックしてから何らかのアクションをしたい場合は SELECT * FROM table1 WHERE id=hoge としてデータを取得し、データチェック、データ整形後、 INSERT INTO table2 VALUES(........) でtable2にデータをインサート、その後上記DELETEで削除するだけです。

yes87
質問者

お礼

どうもありがとうございます。 教えて頂いたとおり、うまく動くことができました。 ただ、INSERT INTO table2 SELECT * FROM table1 WHERE id=hoge と DELETE FROM table1 WHERE id=hoge を 一度のクエリで対処することは無理なのでしょうか? 一度の処理でinsertとdeleteができれば便利なのですが。

関連するQ&A