MySQL でのテーブル定義と構造変更の実践技術

データベーステーブルの基本概念

リレーショナルデータベース管理システム(RDBMS)において、データは「テーブル」と呼ばれる構造化された単位に格納されます。各テーブルは複数の列(フィールド)と行(レコード)で構成され、特定のエンティティに関する情報を体系的に管理します。

テーブルの作成手順

新しいテーブルを作成するには、SQL の CREATE TABLE 構文を使用します。以下は基本的な書式です。

CREATE TABLE テーブル名 (
    列名1 データ型 [制約条件],
    列名2 データ型 [制約条件],
    ...
);

主な制約条件とその役割は以下の通りです。

制約タイプ機能説明
PRIMARY KEY主キーを設定し、各行を一意に識別できるようにします
FOREIGN KEY外部キー制約を定義し、他テーブルとの整合性を保ちます
NOT NULL該当列への null 値格納を禁止します
UNIQUE列内の値が重複しないことを保証します
AUTO_INCREMENT数値タイプの列に対して自動インクリメント機能を付与します
DEFAULT明示的に値が指定されない場合の初期値を設定します

サンプル実装例

カテゴリ管理と在庫管理を行うための二つのテーブルを作成するケースを想定します。

カテゴリテーブルの定義

CREATE TABLE product_categories (
    cat_id INT PRIMARY KEY AUTO_INCREMENT,
    cat_name VARCHAR(50) NOT NULL,
    description TEXT
);

商品在庫テーブルの定義

CREATE TABLE inventory_items (
    item_id INT PRIMARY KEY AUTO_INCREMENT,
    item_code VARCHAR(20) UNIQUE NOT NULL,
    price DECIMAL(10, 2),
    category_ref INT,
    CONSTRAINT fk_category FOREIGN KEY (category_ref) REFERENCES product_categories(cat_id)
);

ここでは、inventory_itemscategory_refproduct_categoriescat_id を参照するように設定しています。

テーブル情報の確認

既存テーブルのカラム定義を確認するには、次のコマンドが有効です。

DESCRIBE inventory_items;

より詳細な作成情報や完全な DDL コードを取得したい場合は、以下を使用します。

SHOW CREATE TABLE inventory_items;

テーブルの変更操作 (ALTER TABLE)

運用中に要件が変化した場合、既存テーブルを変更する必要があります。

テーブル名の再命名

ALTER TABLE inventory_items RENAME TO warehouse_stock;

カラム属性の変更

既存のカラム名やデータ型を変更する際は CHANGE 句を用います。

ALTER TABLE warehouse_stock CHANGE item_code sku_number VARCHAR(30) NOT NULL;

また、カラムを追加する際には位置指定が可能です。

ALTER TABLE warehouse_stock ADD stock_quantity INT DEFAULT 0 AFTER price;
ALTER TABLE warehouse_stock ADD note VARCHAR(100) FIRST;

インデックスの管理

検索性能向上のためにインデックスを追加する場合、以下のように記述します。

ALTER TABLE warehouse_stock ADD INDEX idx_sku (sku_number);
ALTER TABLE warehouse_stock ADD UNIQUE INDEX uk_code (item_code);

オブジェクトの削除処理

不要となった要素を削除するコマンドは以下の通りです。

カラムの削除

ALTER TABLE warehouse_stock DROP COLUMN note;

主キー制約の解除

ALTER TABLE warehouse_stock DROP PRIMARY KEY;

テーブルの破棄

テーブル全体を消去するには DROP TABLE を使用します。これは復元不可のため注意が必要です。

DROP TABLE IF EXISTS warehouse_stock;

タグ: MySQL DDL database-schema sql-syntax alter-table

5月26日 15:17 投稿