第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ステートメントの実行はテーブルのデータに影響を与える可能性がありますので、操作を行う前には必ずデータのバックアップを取るなど、十分な注意が必要です。