7. SQLのインポート

テーブル定義のインポート

データベースの作成

「my_shop」データベースを新規作成します。

SQLデータのダウンロード

「users」テーブルのDDLとレコードは以下からダウンロードしてください。

yoo16/php_mysql

ファイル 用途
create_table.sql テーブル定義(DDL)
insert_users.sql usersのレコード

DDLインポート

DDLファイル「create_table.sql」を「my_shop」データベースにインポートして、テーブル作成します。

テーブル定義(DLL)のインポート

「my_shop」データベースを選択します。

メニューから「インポート」タブを選択し、アップロードファイル欄の【ファイルを選択】をクリックします。

「create_table.sql」を選択します。

ファイルを選択したら画面下にスクロールして【実行】ボタンをクリックします。

「インポートは正常に終了しました。」が表示されれば成功です。

テーブル確認

データベース一覧にテーブルが作成されたのを確認します。

MySQLコマンドでテーブル作成

phpMyAdminでなく、mysqlコマンドで SQLファイルを実行することもできます。ターミナルで「create_table.sql 」を配置したディレクトリに移動**します。

cd SQLファイル配置ディレクトリ

mysqlコマンドで「my_shop」データベースに「create_table.sql」をインポートします。

 mysql -u root my_shop < create_table.sql

レコードのインポート

「users」テーブルにサンプルデータをインポートしてみましょう。データベース一覧から「my_shop.users」テーブルを選択します。

メニューから「インポート」タブを選択し、アップロードファイル欄の【ファイルを選択】をクリックします。

インポートする SQL ファイル(insert_users.sql)を選択します。

ファイルを選択したら画面下にスクロールして【実行】ボタンをクリックします。

「インポートは正常に終了しました。」が表示されれば成功です。

データ確認

users テーブルをクリックしてデータを確認してみましょう。

テーブル定義の確認

各テーブルのDDLは以下のCREATE TABLEで定義できます。データベースの種類によって若干異なりますが、基本的構文は同じです。

users

項目 カラム名 データ型 オプション
ID id bigint Primary Key, auto_increment
氏名 name varchar(255) NOT NULL
メールアドレス email varchar(255) NOT NULL, UNIQUE
パスワード password varchar(255) NOT NULL
性別 gender varchar(16) DEFAULT NULL
作成日 created_at datetime DEFAULT CURRENT_TIMESTAMP
更新日 updated_at datetime DEFAULT CURRENT_TIMESTAMP
CREATE TABLE users (
    id bigint UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    name varchar(255) NOT NULL,
    email varchar(255) UNIQUE NOT NULL,
    password varchar(255) NOT NULL,
    gender varchar(16) DEFAULT NULL,
    created_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
);

items

項目 カラム名 データ型 オプション
ID id bigint Primary Key, auto_increment
商品コード code varchar(255) NOT NULL, UNIQUE
商品名 name varchar(255) NOT NULL
値段 price int NOT NULL
在庫 stock int NOT NULL
作成日 created_at datetime DEFAULT CURRENT_TIMESTAMP
更新日 updated_at datetime DEFAULT CURRENT_TIMESTAMP
CREATE TABLE items (
    id bigint UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    code varchar(255) UNIQUE NOT NULL,
    name varchar(255) NOT NULL,
    price int NOT NULL,
    stock int NOT NULL,
    created_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
);

user_items

項目 カラム名 データ型 オプション
ID id bigint Primary Key, auto_increment
ユーザID user_id bigint NOT NULL
商品ID item_id bigint NOT NULL
個数 amount int NOT NULL
合計金額 total_price int NOT NULL
作成日 created_at datetime DEFAULT CURRENT_TIMESTAMP
更新日 updated_at datetime DEFAULT CURRENT_TIMESTAMP
CREATE TABLE user_items (
    id bigint UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    user_id bigint UNSIGNED NOT NULL,
    item_id bigint UNSIGNED NOT NULL,
    amount int NOT NULL,
    total_price int NOT NULL,
    created_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
);

制約(CONSTRAINT)

CONSTRAINTはテーブル同士でルールをつける制約の機能です。もし関連したレコードが消されてリレーションできないことを防いだりします。

ALTER TABLE user_items
    ADD CONSTRAINT user_items_item_id_fkey FOREIGN KEY (item_id)
      REFERENCES items (id)
      ON DELETE RESTRICT
      ON UPDATE RESTRICT,
    ADD CONSTRAINT user_items_user_id_fkey FOREIGN KEY (user_id)
      REFERENCES users (id)
      ON DELETE RESTRICT
      ON UPDATE RESTRICT;