テーブル内容の変更
テーブル内容の変更には ALTER TABLE コマンドを使います。テーブル自体の変更やテーブルに属するカラムの変更も ALTER TABLE コマンドを使います。
ALTER TABLE table_name
ALTER COLUMN column_name TYPE column_type;
ALTER は変更を意味するコマンドです。
上記の例では、ALTER TABLE
はテーブルの内容を変更することを示しています。次のALTER COLUMN .. TYPE ..
はテーブルに属するカラムのデータタイプを変更することを示しています。
ALTER TABLE によって変更できるものには、テーブル自体の名称の変更とカラムごとの名称やデータタイプの変更やカラムの削除や追加、制約の追加や削除などがあります。
テーブルの詳細や制約については以下のコマンドで確認することができます。
SHOW CREATE TABLE table_name;
> \d table_name
テーブル自体の変更
テーブル名称を変更
テーブルの名称を変更するには以下のようにします。
ALTER TABLE tbl_name
RENAME [TO | AS] new_tbl_name
ALTER TABLE name
RENAME TO new_nam;
他にも変更できるテーブルの要素があるのですがその方法はデータベースによって異なるため、ここでは名称だけ取り上げます。その他については各データベースの仕様を参照してください。
以下はテーブルの名称を変更する簡単な作成例です。
ALTER TABLE name
RENAME TO new_name;
テーブル名 name を new_name に変更します。
カラムの変更
テーブルのカラムの変更、追加、削除は ALTER TABLE table_name の後に ALTER、ADD、DROP といったコマンドを続けます。
カラム名を変更
ALTER TABLE tbl_name RENAME COLUMN old_col_name TO new_col_name;
ALTER TABLE [ ONLY ] name [ * ] RENAME [ COLUMN ] column TO new_column;
以下はカラム名を変更する簡単な例です。
ALTER TABLE table_name
RENAME COLUMN old_col_name TO new_col_name;
カラム名 old_col_name を new_col_name に変更します。
データタイプを変更
ALTER TABLE tbl_name MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name]
PostgreSQL ではカラムのデータタイプを変更できません。一旦該当するカラムを削除の後に改めてカラムを追加する方法があります。 その際にデータが消滅しますので十分に注意してください。
以下はカラムのデータタイプを変更する簡単な例です。
ALTER TABLE table_name
MODIFY col_name text;
カラム col_name を text 型に変更します。
カラムのデータタイプの変更について詳しくは列のデータタイプを変更 ALTER TABLE、ALTER COLUMN、TYPE
を参照してください。
カラムの追加
ALTER TABLE tbl_name ADD [COLUMN] (col_name column_definition,...) または ALTER TABLE tbl_name ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name]
ALTER TABLE [ ONLY ] name [ * ]
ADD [ COLUMN ] column type [ column_constraint [ ... ] ]
以下はカラムのデータタイプを変更する簡単な例です。
ALTER TABLE table_name
MODIFY col_name VARCHAR(20);
カラム col_name を VARCHAR(20) で追加します。
カラムの追加について詳しくはテーブルに列を追加 ALTER TABLE、ADD COLUMN
を参照してください。
カラムを削除
ALTER TABLE tbl_name DROP [COLUMN] col_name
ALTER TABLE [ ONLY ] name [ * ]
DROP [ COLUMN ] column [ RESTRICT | CASCADE ]
以下はカラムを削除する簡単な例です。
ALTER TABLE table_name
DROP col_name;
カラム col_name を削除します。
カラムの削除について詳しくはテーブルから列を削除 ALTER TABLE、DROP COLUMN
を参照してください。
デフォルトの設定を変更
ALTER TABLE tbl_name
ALTER [COLUMN] col_name {
SET DEFAULT {literal | (expr)}
| SET {VISIBLE | INVISIBLE}
| DROP DEFAULT
}
ALTER TABLE [ ONLY ] name [ * ]
ALTER [ COLUMN ] column { SET DEFAULT expression | DROP DEFAULT }
以下は DEFAULT の設定を変更する簡単な例です。
ALTER TABLE table_name
ALTER col_name SET DEFAULT NULL;
カラム col_name にデフォルト値として NULL を設定します。
ALTER TABLE table_name
ALTER col_name DROP DEFAULT;
カラム col_name のデフォルト設定を削除します。
NOT NULL 制約を変更
MySQL で NOT NULL 制約を設定したり削除するにはカラムの定義を NOT NULL の有無によって定義し直します。
NOT NULL とは NULL、何も値がないことを拒否します。
ALTER TABLE tbl_name MODIFY [COLUMN] col_name column_definition
例えば NOT NULL 制約を設定するには以下のように NOT NULL が有る状態で定義し直します。
ALTER TABLE example_table
MODIFY COLUMN exam_column text NOT NULL;
NOT NULL 制約を削除するには以下のように NOT NULL が無い状態で定義し直します。
ALTER TABLE example_table MODIFY COLUMN exam_column text;
ALTER TABLE [ ONLY ] name [ * ]
ALTER [ COLUMN ] column { SET | DROP } NOT NULL
以下は PostgreSQL での簡単な例です。
ALTER TABLE table_name
ALTER col_name SET NOT NULL;
カラム col_name に NOT NULL を設定します。
ALTER TABLE table_name
ALTER col_name DROP NOT NULL;
カラム col_name の NOT NULL 設定を削除します。
PRIMARY KEY 制約の追加・削除
PRIMARY KEY 制約の追加
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (key_part,...) [index_option] ...
ALTER TABLE [ ONLY ] name [ * ] ADD [ CONSTRAINT constraint_name ] PRIMARY KEY ( column_name [, ... ] ) [ INCLUDE ( column_name [, ... ] ) ][ WITH ( storage_parameter [= value] [, ... ] ) ][ USING INDEX TABLESPACE tablespace_name ] [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] [ NOT VALID ]
以下は PRIMARY KEY 制約と追加する簡単な例です。
ALTER TABLE table_name
ADD PRIMARY KEY ( column_name );
PRIMARY KEY 制約を追加したいカラム名( column_name )を指定します。PRIMARY KEY は複数のカラムに設定することができません。
PRIMARY KEY 制約の削除
ALTER TABLE tbl_name DROP PRIMARY KEY
ALTER TABLE [ ONLY ] name [ * ] DROP PRIMARY KEY または ALTER TABLE [ ONLY ] name [ * ] DROP CONSTRAINT [ IF EXISTS ] constraint_name [ RESTRICT | CASCADE ]
PRIMARY KEY の変更はできません。一度削除して追加する必要があります。
以下は PRIMARY KEY 制約と削除する簡単な例です。
ALTER TABLE table_name
DROP PRIMARY KEY;
テーブル table_name の DROP PRIMARY KEY を削除します。
FOREIGN KEY 制約の追加・削除
FOREIGN KEY 制約の追加
ALTER TABLE tbl_name
ADD [CONSTRAINT [symbol]] FOREIGN KEY
[index_name] (col_name,...) REFERENCES tbl_name (col_name,...)
[ON DELETE reference_option]
[ON UPDATE reference_option]
reference_option:
RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT
ALTER TABLE [ ONLY ] name [ * ] ADD [CONSTRAINT constraint_name] FOREIGN KEY (column) REFERENCES ref_table_name (ref_column) [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] [ NOT VALID ]
以下は FOREIGN KEY を追加する簡単な例です。
ALTER TABLE table_name
ADD FOREIGN KEY ( col_name ) REFERENCES ref_table_name (ref_column);
カラム col_name に ref_table_name テーブルの ref_column カラムとの外部キーを設定します。
FOREIGN KEY 制約の削除
ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol
ALTER TABLE [ ONLY ] name [ * ] DROP CONSTRAINT [ IF EXISTS ] constraint_name [ RESTRICT | CASCADE ]
FOREIGN KEY の変更はできません。一度削除して追加する必要があります。
PostgreSQL で FOREIGN KEY を削除するには、FOREIGN KEY を作成したときに付けられた constraint_name を指定します。
以下は FOREIGN KEY を削除する簡単な例です。
ALTER TABLE table_name
DROP FOREIGN KEY fk_symbol;
FOREIGN KEY fk_symbol を削除します。fk_symbol は CONSTRAINT 名または制約名です。
FOREIGN KEY 制約の CONSTRAINT 名または制約名は、MySQL では
で、PostgreSQL ではSHOW CREATE TABLE table_name;
で確認できます。\d table_name
UNIQUE 制約の追加・削除
UNIQUE 制約は記録するカラムデータに同じものがないようにするための制約です。
複数のカラムを組み合わせることができます。
UNIQUE 制約の追加
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] UNIQUE [INDEX | KEY] [index_name] [index_type] (key_part,...) [index_option] ..
ALTER TABLE [ ONLY ] name [ * ] ADD UNIQUE USING INDEX index_name [ NOT VALID ]
以下は UNIQUE 制約の追加の簡単な例です。
ALTER TABLE table_name
ADD UNIQUE ( col_name );
カラム col_name に UNIQUE 制約を設定します。
複数のカラムの組み合わせに同じデータがないようにすることもできます。
ALTER TABLE table_name
ADD UNIQUE ( col_name_a, col_name_b );
UNIQUE 制約の削除
ALTER TABLE tbl_name
DROP {INDEX | KEY} index_name
ALTER TABLE [ ONLY ] name [ * ] DROP CONSTRAINT [ IF EXISTS ] constraint_name [ RESTRICT | CASCADE ]
以下は UNIQUE 制約の削除の簡単な例です。
ALTER TABLE table_name
DROP uk_symbol;
uk_symbol は UNIQUE 制約を表す CONSTRAINT 名または制約名です。
UNIQUE 制約の CONSTRAINT 名または制約名は、MySQL では
で、PostgreSQL ではSHOW CREATE TABLE table_name;
で確認できます。\d table_name
UNIQUE KEY の変更はできません。一度削除して追加する必要があります。
CHECK 制約の追加・削除
CHECK 制約の追加
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] CHECK (expr) [[NOT] ENFORCED]
ALTER TABLE [ ONLY ] name [ * ] ADD [ CONSTRAINT constraint_name ] CHECK ( expression ) [ NO INHERIT ] [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] [ NOT VALID ]
以下は CHECK 制約の追加の簡単な例です。
ALTER TABLE table_name
ADD CHECK ( col_name >= 100 );
カラム col_name の値が 100 以上であるように制約を追加しています。
CHECK 制約の変更
ALTER TABLE tbl_name ALTER CHECK symbol [NOT] ENFORCED
MySQL では CHECK 制約を機能させないようにすることができるようです。
PostgreSQL では変更はできません。一度削除して追加することはできます。
CHECK 制約の削除
ALTER TABLE tbl_name DROP CHECK symbol
ALTER TABLE [ ONLY ] name [ * ] DROP CONSTRAINT [ IF EXISTS ] constraint_name [ RESTRICT | CASCADE ]
以下は CHECK 制約の削除の簡単な例です。
ALTER TABLE table_name
DROP CHECK chck_symbol;
chck_symbol は CHECK 制約を表す CONSTRAINT 名または制約名です。
UNIQUE 制約の CONSTRAINT 名または制約名は、MySQL では
で、PostgreSQL ではSHOW CREATE TABLE table_name;
で確認できます。\d table_name
