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)
列の削除、追加、または再配置
既存の列を削除するとします i 上記のMySQLiテーブルから、 DROP と一緒に節 ALTER 次のようにコマンド-
mysql> ALTER TABLE tutorials_alter DROP i;
A 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を使用して最初の列にするか、AFTERcol_nameを使用して新しい列をcol_nameの後に配置する必要があることを示します。次のALTERTABLEステートメントを試してください。各ステートメントの後にSHOWCOLUMNSを使用して、それぞれがどのような効果をもたらすかを確認してください。
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 または CHANGEALTERコマンドとともに句。たとえば、列を変更するには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;
ヌルおよびデフォルト値属性に対するALTERTABLEの影響-
列を変更または変更するときに、列に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)
テーブルタイプの変更
を使用してテーブルタイプを使用できます TYPE ALTERコマンドとともに句。
テーブルの現在のタイプを確認するには、SHOW TABLESTATUSステートメントを使用します。
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)
テーブルの名前を変更する
テーブルの名前を変更するには、 RENAMEALTERTABLEステートメントのオプション。次の例を試して、tutorials_alterの名前をtutorials_bksに変更してください。
mysql> ALTER TABLE tutorials_alter RENAME TO tutorials_bks;
ALTERコマンドを使用して、MySQLファイルにINDEXを作成およびドロップできます。この機能については、次の章で説明します。