Mysql-alter-command

提供:Dev Guides
移動先:案内検索

MySQL-ALTERコマンド

MySQLの ALTER コマンドは、テーブルの名前やテーブルフィールドを変更する場合、またはテーブルの既存の列を追加または削除する場合に非常に便利です。

*testalter_tbl* というテーブルの作成から始めましょう。
root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
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;
+-------+---------+------+-----+---------+-------+
| Field |  Type   | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
|   i   | int(11) | YES  |     |   NULL  |       |
|   c   | char(1) | YES  |     |   NULL  |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)

列のドロップ、追加、または再配置

上記のMySQLテーブルから既存の列iを削除する場合は、以下に示すように ALTER コマンドとともに DROP 句を使用します-

mysql> ALTER TABLE testalter_tbl  DROP i;

列がテーブルに残っている場合、 DROP 句は機能しません。

列を追加するには、ADDを使用して列定義を指定します。 次のステートメントは、 i 列をtestalter_tblに復元します-

mysql> ALTER TABLE testalter_tbl ADD i INT;

このステートメントを発行すると、testalterには、最初にテーブルを作成したときと同じ2つの列が含まれますが、同じ構造にはなりません。 これは、デフォルトでテーブルの最後に追加される新しい列があるためです。 したがって、 i は元々mytblの最初の列でしたが、現在は最後の列です。

mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Field |  Type   | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
|   c   | char(1) | YES  |     |   NULL  |       |
|   i   | int(11) | YES  |     |   NULL  |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)

テーブル内の特定の位置に列が必要であることを示すには、FIRSTを使用して最初の列にするか、 AFTER col_name を使用して、新しい列をcol_nameの後に配置することを示します。

次の 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句でのみ機能します。 つまり、テーブル内の既存の列の位置を変更する場合は、最初に 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;

CHANGEを使用して、 JBIGINT から INT に変換し、列名を変更しない場合、ステートメントは以下のようになります-

mysql> ALTER TABLE testalter_tbl CHANGE j j INT;
  • NULLおよびデフォルト値の属性に対するALTER TABLEの効果*-列を変更または変更するとき、列にNULL値を含めることができるかどうか、およびそのデフォルト値を指定することもできます。 実際、これを行わないと、MySQLはこれらの属性の値を自動的に割り当てます。

次のコードブロックの例は、 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;
+-------+---------+------+-----+---------+-------+
| Field |  Type   | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
|   c   | char(1) | YES  |     |   NULL  |       |
|   i   | int(11) | YES  |     |   1000  |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)
*ALTER* コマンドとともにDROP句を使用すると、任意の列からデフォルトの制約を削除できます。
mysql> ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;
mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Field |  Type   | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
|   c   | char(1) | YES  |     |   NULL  |       |
|   i   | int(11) | YES  |     |   NULL  |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)

テーブルタイプの変更(変更)

ALTERコマンドとともに TYPE 句を使用すると、テーブルタイプを使用できます。 次の例を試して、 testalter_tblMYISAM テーブルタイプに変更してください。

テーブルの現在のタイプを調べるには、 SHOW TABLE STATUS ステートメントを使用します。

mysql> ALTER TABLE testalter_tbl TYPE = 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:
        Comment:
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ファイルでINDEXコマンドを作成およびドロップできます。 このコマンドについては、次の章で詳しく説明します。