MySQLでテーブルをコピーする方法|SELECTでコピーするとカラムの情報が引き継がれないので注意!

mysqlでテーブルをコピーするMySQL

こんにちは。いっとくです!

先日仕事中にハマったのでメモ。

Webサイトをいじっていると必ずと言っていいくらいDBを操作する必要があると思います。

僕が現在働いている現場では、PHPを使ってサイトの開発を行なっており、データベースをMySQLで動かしています。

つい最近の出来事なのですが、テスト環境のデータベースをいじる際、ちょっと間違えたのであらかじめ取っておいたバックアップからテーブルを元に戻しました。

そしたら、プライマリーキーやindex等々の情報がカラムから消えているではありませんか!!

いつもはオートインクリメントでidが振られていたのに、気づいたらデフォルトの0が入るようになっている、、、

スポンサーリンク

MySQLでテーブルをコピーする方法

今回オートインクリメントが外れてしまった原因はバックアップ用にテーブルを複製した時のクエリにありました。

今回使ったのがこちらのクエリ。

CREATE TABLE バックアップ用のテーブル (SELECT * FROM 既存テーブル);

どうやらこの方法だと、カラムとかレコードの内容はぱっと見ちゃんとコピーされているのですが、オートインクリメントとかが外れる模様

なので、ちょっとクエリの発行数は多くなりますが、以下の手順で複製するのが吉だと思いました。

-- LIKE句を使ってテーブルをコピー
CREATE TABLE バックアップ用のテーブル名 LIKE コピー元のテーブル名;

-- 元のテーブルのレコードをインサートする
INSERT INTO バックアップ用のテーブル名 SELECT * FROM コピー元のテーブル名;

これで万事解決です。ちゃんとオートインクリメントも残っています。よかったー!

もともと今回紹介したほうでコピーしていたのですが、一行でコピーできるじゃん!ヤッフー!っと思って楽そうな方に手を出したらちょっと痛い目見ました。

ということで、カラムの情報までしっかりコピーしたいという場合は、少し面倒でもからのテーブルを作成してからインサートするようにしましょう。

以上、いっとくでした。

おしまい!

コメント

タイトルとURLをコピーしました