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を削除する場合は、 DROP と一緒に条項 ALTER 以下に示すコマンド-
mysql> ALTER TABLE testalter_tbl DROP i;
A 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 新しい位置にあります。
列定義または名前の変更(変更)
列の定義を変更するには、 MODIFY または CHANGE ALTERコマンドとともに句。
たとえば、列を変更するには 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を使用して変換する場合 j から BIGINT 戻る INT 列名を変更しない場合、ステートメントは次のようになります-
mysql> ALTER TABLE testalter_tbl CHANGE j j INT;
The Effect of ALTER TABLE on Null and Default Value Attributes−列を変更または変更する場合、列に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)
DROP句を使用して、任意の列からデフォルトの制約を削除できます。 ALTER コマンド。
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)
テーブルタイプの変更(変更)
を使用してテーブルタイプを使用できます TYPEALTERコマンドとともに句。次の例を試して、testalter_tbl に MYISAM テーブルタイプ。
テーブルの現在のタイプを確認するには、 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)
テーブルの名前の変更(変更)
テーブルの名前を変更するには、 RENAME のオプション ALTER TABLE ステートメント。
次の例を試して名前を変更してください testalter_tbl に alter_tbl。
mysql> ALTER TABLE testalter_tbl RENAME TO alter_tbl;
ALTERコマンドを使用して、MySQLファイルにINDEXコマンドを作成してドロップできます。このコマンドについては、次の章で詳しく説明します。