English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

MySQLALTERコマンド

データベースのテーブル名を変更する場合や、テーブルのフィールドを変更する場合、MySQLのALTERコマンドを使用する必要があります。

本章のチュートリアルを開始する前に、まずテーブルを作成しましょう。テーブル名は:testalter_tbl。

root@host# mysql -u root -p パスワード;
パスワードを入力してください:*******
mysql> use w3codebox;
Database changed
mysql> create table testalter_tbl
    -> (
    -> i INT,
    -> c CHAR(1)
    -> );
Query OK, 0 rows affected (0.05 sec)
mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| フィールド | タイプ    | NULL | キー | デフォルト | エクストラ |
+-------+---------+------+-----+---------+-------+
| i     | int(11) | YES  |     | NULL    |       |
| c     | char(1) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
2 セット内の行(0.00秒)

テーブルのフィールドの削除、追加、または変更

以下のコマンドは、ALTER コマンドと DROP 節を使用して、上記で作成したテーブルの i フィールドを削除するために使用されています:

mysql> ALTER TABLE testalter_tbl  DROP i;

データベースにフィールドが1つしか残っていない場合、DROPを使用してフィールドを削除することはできません。

MySQLでは、ADD 節を使用してデータベースに列を追加します。以下の例では、テーブル testalter_tbl に i フィールドを追加し、データ型を定義しています:

mysql> ALTER TABLE testalter_tbl ADD i INT;

以上のコマンドを実行すると、i フィールドが自動的にデータベースのフィールドの末尾に追加されます。

mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| フィールド | タイプ    | NULL | キー | デフォルト | エクストラ |
+-------+---------+------+-----+---------+-------+
| c     | char(1) | YES  |     | NULL    |       |
| i     | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
2 セット内の行(0.00秒)

新しいフィールドの位置を指定する必要がある場合、MySQLが提供するキーワード FIRST(最初の列に設定)または AFTER フィールド名(特定のフィールドの後に設定)を使用できます。

以下の ALTER TABLE ステートメントを試してみてください。成功後に SHOW COLUMNS を使用してテーブル構造の変更を確認します:

ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT FIRST;
ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT AFTER c;

FIRST と AFTER キーワードは ADD と MODIFY 節で使用できます。したがって、データベースのフィールドの位置をリセットしたい場合は、まず DROP を使用してフィールドを削除し、ADD を使用してフィールドを追加して位置を設定する必要があります。

フィールドのタイプと名前の変更

フィールドのタイプと名前を変更する必要がある場合、ALTER コマンドで MODIFY や CHANGE 節を使用できます。

例えば、フィールド c のタイプを CHAR(1) を CHAR(10)、以下のコマンドを実行できます:

mysql> ALTER TABLE testalter_tbl MODIFY c CHAR(10);

CHANGE 節を使用すると、構文が大きく変わります。 CHANGE キーワードの後には、変更したいフィールド名が続きます。次に新しいフィールド名とタイプを指定します。以下の例を試してみてください:

mysql> ALTER TABLE testalter_tbl CHANGE i j BIGINT;

現在フィールドjをBIGINTからINTに変更したい場合は、以下のSQL文を使用します:

mysql> ALTER TABLE testalter_tbl CHANGE j j INT;

ALTER TABLEはNULL値とデフォルト値に与える影響

フィールドを変更する際には、値を含めるかどうか、またはデフォルト値を設定するかどうかを指定できます。

以下の例では、フィールドjをNOT NULLおよびデフォルト値として指定します:100 。

mysql> ALTER TABLE testalter_tbl 
    -> MODIFY j BIGINT NOT NULL DEFAULT 100;

デフォルト値を設定しない場合、MySQLは自動的にNULLをデフォルト値として設定します。

フィールドのデフォルト値の変更

フィールドのデフォルト値を変更するにはALTERを使用して、以下の例を試してみてください:

mysql> ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| フィールド | タイプ    | NULL | キー | デフォルト | エクストラ |
+-------+---------+------+-----+---------+-------+
| c     | char(1) | YES  |     | NULL    |       |
| i     | int(11) | YES  |     | 1000    |       |
+-------+---------+------+-----+---------+-------+
2 セット内の行(0.00秒)

ALTERコマンドおよびDROP子句を使用して、フィールドのデフォルト値を削除することもできます。以下の例を試してみてください:

mysql> ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;
mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| フィールド | タイプ    | NULL | キー | デフォルト | エクストラ |
+-------+---------+------+-----+---------+-------+
| c     | char(1) | YES  |     | NULL    |       |
| i     | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
2 セット内の行(0.00秒)
テーブルタイプの変更:

データベーステーブルのタイプを変更するには、ALTERコマンドおよびTYPE子句を使用して完成できます。以下の例を試してみてください、テーブルtestalter_tblのタイプをMYISAMに変更します:

注意:データベーステーブルのタイプを確認するには、SHOW TABLE STATUS文を使用できます。

mysql> ALTER TABLE testalter_tbl ENGINE = MYISAM;
mysql>  SHOW TABLE STATUS LIKE 'testalter_tbl'\G
*************************** 1. row ****************
           Name: testalter_tbl
           Type: MyISAM
     Row_format: Fixed
           Rows: 0
 Avg_row_length: 0
    Data_length: 0
Max_data_length: 25769803775
   Index_length: 1024
      Data_free: 0
 Auto_increment: NULL
    Create_time: 2007-06-03 08:04:36
    Update_time: 2007-06-03 08:04:36
     Check_time: NULL
 Create_options:
        コメント:
1 row in set (0.00 sec)

テーブル名の変更

データテーブルの名前を変更するには、ALTER TABLE文でRENAME子句を使用することができます。

以下の例を試してみてください:データテーブル testalter_tbl を alter_tbl にリネームします。

mysql> ALTER TABLE testalter_tbl RENAME TO alter_tbl;

ALTERコマンドは、MySQLデータテーブルの索引の作成および削除にも使用できます。この機能については、次の章で説明します。