カラムの名前と定義の変更
カラム名の変更方法を確認します。書式は次の通りです。
ALTER TABLE tbl_name CHANGE [COLUMN] old_col_name column_definition;
変更したいカラムの名前をold_col_nameとして指定します。そして新しいカラム名をカラム定義の形式で指定します。つまりこの構文はカラム名の変更用というよりも、あるカラムを別のカラム(名前やデータ型などの属性も含めて)に変更する場合に使用するものです。
名前だけ変更したい場合は、変更前のカラムのデータ型や属性をそのまま新しいカラムの定義に記述する必要があります。また名前に合わせて属性を変更したい場合には新しいカラムのデータ定義に記述することで同時に変更することができます。
例えば次のように使います。
alter table personal change id userid int;
上記の場合、personalテーブルにあるidカラムの名前をuseridに変更します。
サンプル
では実際に試してみます。次のようにテーブルを作成し、いくつかデータを追加します。
mysql> create table goods(id int not null, name varchar(10) default 'none');
「id」カラムの名前を「no」に変更します。名前だけ変更するので、データ型などは前と同じに設定します。
mysql> alter table goods change id no int not null;
では「SHOW CREATE TABLE」文で確認します。
カラム名が「no」に変更されていることが確認できました。
今度は「name」カラムの名前を「goodsname」に変更します。また合わせてデータ型をvarchar(20)に変更しデフォルト値の設定は削除します。
mysql> alter table goods change name goodsname varchar(20);
変更後に「SHOW CREATE TABLE」文で確認するとカラム名が「goodsname」に変更されデータ型などの定義も変更されていることが確認できました。
カラム定義だけを変更する
ALTER TABLE CHANGE文ではカラム名の変更に加えてカラム定義の変更も行えましたが、カラム定義だけを変更したい場合にはALTER TABLE MODIFY文を使用することもできます。書式は次の通りです。
ALTER TABLE tbl_name MODIFY [COLUMN] column_definition;
column_definitionに記載したカラムの定義を変更します。よってcolumn_definitionに記述するカラム名はテーブル内に存在するカラム名でなければなりません。
では実際に試してみます。先ほど使用したテーブルの「no」カラムのデータ型をSMALLINT型に変更します。
mysql> alter table goods modify no smallint;
変更後に「SHOW CREATE TABLE」文で確認すると「no」カラムのデータ型がSMALLINT型に変更されていることが確認できます。また変更前にはNOT NULLが設定してありましたが、今回NOT NULLは記述しませんでしたのでカラムの定義からは削除されています。
( Written by Tatsuo Ikura )