MySQLでレコードのコピー、複製を行う方法 (プライマリキーの重複を避ける)

データベース
スポンサーリンク

MySQL(MariaDB)でレコードのコピー、複製を行う方法を調べてみた。

ここで紹介する方法を使うと、primary keyの重複を避けて行うことが出来ます。

スポンサーリンク

MySQLでレコードコピーするとDuplicate entry

まず、普通にレコードのコピーを行ってみました。

 

Duplicate entry for key 'PRIMARY'

なるほど、1行をまるまるinsertしようとしてもプライマリキー(primary key)が重複するか。

当然の結果。

 

対策を考えてみました。

プライマリキーを重複しないようにレコードをコピーする方法

プライマリキーのカラム (id) 以外のカラム名をすべて列挙する

 

 

やり方としては、あまり賢い方法ではないが、確実にできる。

カラムが多くなると、列挙するのが大変になる。

 

テンポラリテーブルを作成して、プライマリキーのカラム (id)を削除してInsert、idは0を指定。

 

これは論理的に考えれば、理解しやすくて簡単。

idとして0を insert すれば、プライマリキーは自動生成されます。

スマートでおすすめな方法です。

 

 

CREATE TEMPORARY TABLE は、MySQLで使える一時テーブルです。

これは利用しているセッション内だけで有効なテーブルを作成し、セッションが閉じたときに自動的にテーブルが削除される構文になります。

上記の例では、テンポラリテーブルをDROPしていますが、セッション終了後に自動的に削除されるために削除し忘れを避けることが可能です。

 

コメント