第8章 ALTERステートメント

ALTERの基本的な使い方

ALTERステートメントは、既存のデータベースオブジェクト(例えばテーブル)の構造を変更するために使用されます。カラムの追加や削除、データ型の変更、インデックスの作成や削除など、様々な操作が可能です。

以下に、一例としてテーブルの作成と、そのテーブルのカラムをALTERステートメントを使って変更する例を示します。

まずは、新しいテーブルを作成します。

CREATE TABLE Employees (
    ID INT PRIMARY KEY,
    Name VARCHAR(50),
    Age INT,
    Address VARCHAR(255),
    Salary DECIMAL(18, 2)
);

ここで作成したテーブルにデータを挿入します。

INSERT INTO Employees (ID, Name, Age, Address, Salary) 
VALUES (1, 'John Doe', 30, '1234 Elm Street', 80000.00);

そして、このテーブルに対してALTERステートメントを使って、新たなカラムを追加します。

ALTER TABLE Employees 
ADD Email VARCHAR(100);

これでEmployeesテーブルに新たなカラムEmailが追加されました。それを確認するために、テーブルの構造を表示します。

DESCRIBE Employees;

実行結果

+---------+---------------+------+-----+---------+-------+
| Field   | Type          | Null | Key | Default | Extra |
+---------+---------------+------+-----+---------+-------+
| ID      | int           | NO   | PRI | NULL    |       |
| Name    | varchar(50)   | YES  |     | NULL    |       |
| Age     | int           | YES  |     | NULL    |       |
| Address | varchar(255)  | YES  |     | NULL    |       |
| Salary  | decimal(18,2) | YES  |     | NULL    |       |
| Email   | varchar(100)  | YES  |     | NULL    |       |
+---------+---------------+------+-----+---------+-------+

この結果、テーブルに新しくEmailというカラムが追加されているのが確認できます。


他の操作

カラムの削除

この命令は、EmailというカラムをEmployeesテーブルから削除します。

ALTER TABLE Employees 
DROP COLUMN Email;


カラムの名前の変更

この命令は、Addressというカラムの名前をStreetに変更します。変更後のカラム型も指定する必要があります。

ALTER TABLE Employees 
CHANGE COLUMN Address Street VARCHAR(255);


カラムのデータ型の変更

この命令は、Salaryというカラムのデータ型をDECIMAL(18, 4)に変更します。

ALTER TABLE Employees 
MODIFY COLUMN Salary DECIMAL(18, 4);


テーブルの名前の変更

この命令は、Employeesというテーブルの名前をStaffに変更します。

ALTER TABLE Employees 
RENAME TO Staff;


インデックスの追加

この命令は、Nameというカラムに対してインデックスを追加します。これにより、そのカラムを使用した検索が高速化されます。

ALTER TABLE Employees 
ADD INDEX idx_name (Name);


主キーの追加

この命令は、IDというカラムを主キーとして設定します。主キーはテーブル内で一意でなければならず、NULL値を含むことはできません。

ALTER TABLE Employees
ADD PRIMARY KEY (ID);


ユニーク制約の追加

このコマンドは、Emailカラムに一意性制約を追加します。これにより、Emailカラムには重複した値を持つことができなくなります。

ALTER TABLE Employees 
ADD UNIQUE (Email);


デフォルト値の設定

このコマンドは、Departmentカラムのデフォルト値をHuman Resourcesに設定します。これにより、新しい行を追加する際にDepartmentカラムの値が指定されない場合、デフォルトとしてHuman Resourcesが自動的に設定されます。

ALTER TABLE Employees 
ALTER COLUMN Department SET DEFAULT 'Human Resources';


デフォルト値の削除

このコマンドは、Departmentカラムのデフォルト値を削除します。これにより、新しい行を追加する際にDepartmentカラムの値が指定されない場合、何も設定されなくなります。

ALTER TABLE Employees 
ALTER COLUMN Department DROP DEFAULT;


テーブルのタイプの変更

このコマンドは、EmployeesテーブルのストレージエンジンをInnoDBに変更します。MySQLでは、MyISAMやInnoDBなど、様々なストレージエンジンを使用することができます。それぞれのエンジンは特性が異なるため、適切なエンジンを選択することが重要です。

ALTER TABLE Employees 
ENGINE = InnoDB;


チェック制約の追加

このコマンドは、Salaryカラムの値が0より大きいというチェック制約を追加します。これにより、Salaryの値が0以下である行の追加や更新を防ぐことができます。ただし、MySQLではチェック制約は構文として認識されますが、実際には無視されるため、この機能は他のRDBMSで使用するためのものです。

ALTER TABLE Employees
ADD CONSTRAINT chk_Salary CHECK (Salary > 0);


ALTERステートメントは非常に多機能であり、データベースやテーブルの構造を効率的に管理するための強力なツールです。ただし、ALTERステートメントの実行はテーブルのデータに影響を与える可能性がありますので、操作を行う前には必ずデータのバックアップを取るなど、十分な注意が必要です。