エンジニ屋.com(エンジニヤドットコム)

分かりやすくを意識して情報発信!

【Eccube】商品・受注・会員情報のデータ一括初期化


本記事は、テストで作成したデータなどを完全に削除して、何もデータが入っていない最初の状態に戻す方法を紹介します。


全部のデータを消してしまったら大丈夫でしょ

ばか者!!そんなことしては、デフォルトの大事なデータが消えて、大変なことになるぞい!

Eccubeは、データベースにマスターデータとして設定項目や選択項目など大事なデータがデフォルトで保存されているので無暗に削除してしまうと上手く機能しなくなります。
また商品情報を削除したとしても、1つの商品に対して受注データや注文履歴など関連するデータがいくつもあるので一括で削除しないとずれが発生してしまいます。

こんな人が対象

・不要な受注データをリセットして受注Idを1からデータを保存していきたい
・直接データの削除を試みたが、不整合が起きていてデータが一致しなくなった
・基本的なデータベースの操作が理解している方

筆者が動作確認しているEccubeのバージョンは、4系です。

注意点!!
* プラグインなど入れている場合は、データーベース内に別途プラグイン用のテーブルが作成されていたりするので、別途削除が必要なデータがある可能性があります。
* 実行する場合は、念の為にデータベース上の全データをバックアップを取っておきましょう。
* データ削除は自己責任でお願いします。何かトラブルが起きても責任は負いかねます。

データ削除の方法

Eccubeでは商品情報や受注情報や会員情報は管理画面から完全に削除出来ない仕様となっています。 もし綺麗にデータを初期化したい場合は、下記方法を取ると良いでしょう。

①初期のデータベースと差し替える
②SQLで関連データを含め一括削除

どちらも実装自体は簡単です。
①に関しては、インストール時のデータベースに差し替える方法です。新しくデータベースを作成を作成して、そちらにバックアップファイルなどあれば、そのデータベースにインポートします。 もしデータベース名が異なる場合は、別途.envファイル内のデータベース名を変更する必要があります。
但し、こちらの方法はプラグインなどをインストールしている場合は、初期状態と差分が発生しているので上手くいきません。

②に関しては、データベースに入ってSQLを実行する方法です。
本記事では、②の方法を取りたいので詳しく説明していきます。

削除のSQL文でよく使用されるのが、"DELETE FROM [テーブル名] WHERE [条件];"ですが、削除したとしても、その後の保存データにずれが発生する可能性があります。

というのも、データが保存される時に、Idなどはオートインクリメントで設定されている為、自動で1ずつ増えていきます。
なので、もしDELETE文で削除したとしても、内部で記憶されているのでIDの数値 はその続きからとなります。

では、どのSQL文を使用するのかというと、TRUNCATE文を使用します。

TRUNCATE TABLE [テーブル名];

[テーブル名]の部分に必要なテーブルをはめて実行していくだけです。

該当のテーブル名

上のSQLに該当のテーブル名をはめ込んだのこちらになります。

SET FOREIGN_KEY_CHECKS = 0;
TRUNCATE TABLE dtb_cart;
TRUNCATE TABLE dtb_cart_item;
TRUNCATE TABLE dtb_category;
TRUNCATE TABLE dtb_class_category;
TRUNCATE TABLE dtb_class_name;
TRUNCATE TABLE dtb_customer;
TRUNCATE TABLE dtb_customer_address;
TRUNCATE TABLE dtb_customer_favorite_product;
TRUNCATE TABLE dtb_mail_history;
TRUNCATE TABLE dtb_order;
TRUNCATE TABLE dtb_order_item;
TRUNCATE TABLE dtb_order_pdf;
TRUNCATE TABLE dtb_product;
TRUNCATE TABLE dtb_product_category;
TRUNCATE TABLE dtb_product_class;
TRUNCATE TABLE dtb_product_image;
TRUNCATE TABLE dtb_product_stock;
TRUNCATE TABLE dtb_product_tag;
TRUNCATE TABLE dtb_shipping;

SET FOREIGN_KEY_CHECKS = 1;

1行目の"SET FOREIGN_KEY_CHECKS = 0;"は、関連付けされているデータが存在する場合にエラーが発生するので、一旦エラーを回避する為のSQL文です。

実際の手順

本記事では、直接コマンドからデーターベース(mySql)に入ってSQLを実行する方法を紹介します。 環境によって若干異なる部分があるかもしれませんが、基本的なところは変わりありませんので、 必要によって読み替えて頂ければと思います。

  1. サーバー内でデーターベースに入るコマンドを実行
    mysql -u [ユーザ名] -p
    パスワードが求められるので設定している場合は、入力して進めてください。

  2. データベースの確認
    show databases;

  3. 該当のデータベースに入る use [データベース名];

  4. SQL文をコピー&ペースト
    上記で紹介したSQL文を丸々コピーすると全て自動で実行されます。


削除後は、一通り動作の確認をして問題がなければ完了です!!