はじめに
テーブルとは
アプリケーション内部でデータを保存する箱で、列(カラム)と行(レコード)で構成された
構造化データの集合です。
また、一つのアプリケーションに複数作成できます!
ユーザー情報、ECサイトなどでいう商品情報・注文情報などが登録されたら表のように管理されます。
テーブル操作コマンド一覧
- CREATE TABLE(テーブル作成)
- ALTER TABLE(テーブル変更)
- DROP TABLE(テーブル削除)
- TRUNCATE TABLE(データの一括削除)
ER図
最初に、ユーザーがECサイトで商品を注文する工程を簡単に頭で描いたら以下のようなイメージになるのではないでしょうか。(実際にはもっと複雑でアプリケーションごとに構成も異なります)
テーブル作成
では実際に上記ER図を基にユーザーテーブルを作成してみます。
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
password_hash VARCHAR(255) NOT NULL,
address VARCHAR(255) NOT NULL,
phone_number VARCHAR(20),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
各キーワード
-
AUTO_INCREMENT
自動採番のキーワードの書き方はDBによって異なります- MySQL:
AUTO_INCREMENT - PostgreSQL:
GENERATED ALWAYS AS IDENTITY - SQLite:
AUTOINCREMENT
- MySQL:
-
PRIMARY KEY
- 主キーという重複しないID
- 他のテーブルから参照可能なカラム
-
DEFAULT CURRENT_TIMESTAMP
- データ作成時に自動で現在日時を入れてくれる
- これのみでは更新時に時間は変わらない
-
ON UPDATE CURRENT_TIMESTAMP
- データの更新時は再度現在日時に書き換えてくれる
-
password_hash
- パスワード保存用のカラムですが、ユーザーが設定したパスワードをそのまま保存すると万が一情報が漏れたり抜き取られたりすると、他のユーザーがログインできてしまいます
- ハッシュ化することで、元のパスワードに戻せない形で保存できます
- またユーザーのログイン時には、入力されたパスワードをハッシュ化して保存されているハッシュと合致してるかを比較します
テーブル変更
テーブルの作成後に必要なカラムが足りないことに気づいたり、開発を進めていく中で要件が変更されたりしたらテーブル作り直すのではなく、ALTER TABLEで更新できます
- 年齢のカラム追加
ALTER TABLE users ADD COLUMN age INT;
- emailカラムに重複防止のUNIQUEをつけ忘れていた
ALTER TABLE users
ADD UNIQUE (email);
- 電話番号カラムの削除
ALTER TABLE users
DROP COLUMN phone_number;
- 名前カラムの文字数を変更する
ALTER TABLE users
MODIFY COLUMN name VARCHAR(50);
- テーブル名変更
例)テーブル名単数形で作成しまったとき
ALTER TABLE user RENAME TO users;
ALTER TABLEはテーブルの構造を変更する大きな操作です。
- 処理中はサービスが一時的に止まり、ユーザーがアクセスや操作できなくなることがあります
- 大量のデータを保存している大規模サービスだと処理に時間がかかり、タイムアウトや障害が発生する原因になることがあります
- こうしたリスクを避けるためにメンテナンスの時間を設けて段階的に作業しましょう
テーブル削除
開発が進み、開発初期に作成したテーブルが不要になった場合などにDROP TABLEでテーブルごと削除できます。
DROP TABLE accounts;
- 基本的に
DROP TABLEは簡単に行える操作ではありません! - 後述の
TRUNCATE TABLEと共に、実務で行う際には必ずバックアップを取っておきます! - 新人のうちは先輩に依頼し、テーブル削除してもらうのが無難です
-
DROP TABLEに限らずですが、慣れてきても本番環境の操作はペアでダブルチェックをしながら行いましょう!
テーブルの全てのデータ削除
テーブル自体は残したままテストデータや古いログの削除をする際に行うことができます
TRUNCATE TABLE logs;
開発環境においては動作確認でいろんなデータを作るので、個人開発の場合などにこの操作を行えば一括削除できてデータの整理が楽になるでしょう。
ただし、対象テーブルのカラムが他テーブルのFK(外部キー)として参照されている際は、「参照先を消したら整合性が壊れる」のでエラーになります。
参照先の特定のデータの削除などを行ってからTRUNCATEしてください。