Mysqli-alter-command

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

MySQLi-ALTERコマンド

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

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

mysql> use TUTORIALS;
Database changed

mysql> create table tutorials_alter
   -> (
   -> i INT,
   -> c CHAR(1)
   -> );
Query OK, 0 rows affected (0.27 sec)

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

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

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

mysql> ALTER TABLE tutorials_alter  DROP i;

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

列を追加するには、ADDを使用して列定義を指定します。 次の文は、 i 列をtutorials_alterに復元します-

mysql> ALTER TABLE tutorials_alter ADD i INT;

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

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

テーブル内の特定の位置に列が必要であることを示すには、FIRSTを使用して最初の列にするか、col_nameの後にAF_col_nameの後に新しい列を配置することを示します。 各ステートメントの後にSHOW COLUMNSを使用して、次のALTER TABLEステートメントを試して、各ステートメントの効果を確認します-

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句でのみ機能します。 つまり、テーブル内の既存の列の位置を変更する場合は、最初に列を削除してから、新しい位置に追加する必要があります。

列の定義または名前の変更

列の定義を変更するには、ALTERコマンドとともに MODIFY または CHANGE 句を使用します。 たとえば、列 c をCHAR(1)からCHAR(10)に変更するには、次のようにします-

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

CHANGEでは、構文が少し異なります。 CHANGEキーワードの後に​​、変更する列に名前を付けてから、新しい名前を含む新しい定義を指定します。 次の例を試してください。

mysql> ALTER TABLE tutorials_alter CHANGE i j BIGINT;

列名を変更せずにCHANGEを使用してjをBIGINTからINTに戻す場合、ステートメントは期待どおりになります-

mysql> ALTER TABLE tutorials_alter CHANGE j j INT;

NULLおよびデフォルト値属性に対するALTER TABLEの効果-

列を変更または変更するときに、列にNULL値を含めることができるかどうか、およびそのデフォルト値を指定することもできます。 実際、これを行わない場合、MySQLiはこれらの属性に値を自動的に割り当てます。

次に例を示します。NOTNULL列の値はデフォルトで100です。

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

上記のコマンドを使用しない場合、MySQLiはすべての列のNULL値を埋めます。

列のデフォルト値の変更

ALTERコマンドを使用して、任意の列のデフォルト値を変更できます。 次の例を試してください。

mysql> ALTER TABLE tutorials_alter ALTER j SET DEFAULT 1000;
mysql> SHOW COLUMNS FROM tutorials_alter;
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| c     | char(10)   | YES  |     | NULL    |       |
| j     | bigint(20) | NO   |     | 1000    |       |
+-------+------------+------+-----+---------+-------+
2 rows in set (0.02 sec)

ALTERコマンドとともにDROP句を使用すると、任意の列からデフォルトの制約を削除できます。

mysql> ALTER TABLE tutorials_alter ALTER j DROP DEFAULT;
mysql> SHOW COLUMNS FROM tutorials_alter;
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| c     | char(10)   | YES  |     | NULL    |       |
| j     | bigint(20) | NO   |     | NULL    |       |
+-------+------------+------+-----+---------+-------+
2 rows in set (0.02 sec)

テーブルタイプの変更

ALTERコマンドとともに TYPE 句を使用して、テーブルタイプを使用できます。

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

mysql>  SHOW TABLE STATUS LIKE 'tutorials_alter'\G
************************** *1. row* **************************
           Name: tutorials_alter
         Engine: InnoDB
        Version: 10
     Row_format: Compact
           Rows: 0
 Avg_row_length: 0
    Data_length: 16384
Max_data_length: 0
   Index_length: 0
      Data_free: 0
 Auto_increment: NULL
    Create_time: 2017-02-17 11:30:29
    Update_time: NULL
     Check_time: NULL
      Collation: latin1_swedish_ci
       Checksum: NULL
 Create_options:
        Comment:
1 row in set (0.00 sec)

テーブルの名前を変更する

テーブルの名前を変更するには、ALTER TABLEステートメントの RENAME オプションを使用します。 次の例を試して、tutorials_alterの名前をtutorials_bksに変更してください。

mysql> ALTER TABLE tutorials_alter RENAME TO tutorials_bks;

ALTERコマンドを使用して、MySQLファイルのINDEXを作成および削除できます。 この機能については、次の章で説明します。