概要
ALTER文は、既存のテーブルやデータベースの構造を変更するために使用されます。
テーブル名変更
RENAME文は、テーブルの名前を変更するためのALTER文の一部です。
ALTER TABLE 変更前テーブル名 RENAME TO 変更後テーブル名;
mysql> SHOW TABLES;
+------------------------+
| Tables_in_test_db |
+------------------------+
| test |
+------------------------+
1 rows in set (0.01 sec)
【テーブル名変更】
mysql> ALTER TABLE test RENAME TO new_test;
mysql> SHOW TABLES;
+------------------------+
| Tables_in_test_db |
+------------------------+
| new_test |
+------------------------+
1 rows in set (0.01 sec)
カラム追加
ADD COLUMN文は、テーブルに新しいカラム(列)を追加するためのALTER文の一部です。
ALTER TABLE テーブル名 ADD COLUMN 新カラム名 データ型;
【usersテーブルの一覧表示】
mysql> SHOW COLUMNS FROM users;
+-------+-----------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------------+------+-----+---------+----------------+
| id | bigint unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(20) | YES | | no_name | |
| age | int | YES | | NULL | |
+-------+-----------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)
【カラム追加】
mysql> ALTER TABLE users ADD COLUMN email VARCHAR(255);
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
【usersテーブルの一覧表示】
mysql> SHOW COLUMNS FROM users;
+-------+-----------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------------+------+-----+---------+----------------+
| id | bigint unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(20) | YES | | no_name | |
| age | int | YES | | NULL | |
| email | varchar(255) | YES | | NULL | |
+-------+-----------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)
カラム削除
DROP COLUMN文は、テーブル内のカラム(列)を削除するためのALTER文の一部です。
ALTER TABLE テーブル名 DROP COLUMN カラム名;
【usersテーブルの一覧表示】
mysql> SHOW COLUMNS FROM users;
+-------+-----------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------------+------+-----+---------+----------------+
| id | bigint unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(20) | YES | | no_name | |
| age | int | YES | | NULL | |
| email | varchar(255) | YES | | NULL | |
+-------+-----------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)
【カラム削除】
mysql> ALTER TABLE users DROP COLUMN email;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
【usersテーブルの一覧表示】
mysql> SHOW COLUMNS FROM users;
+-------+-----------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------------+------+-----+---------+----------------+
| id | bigint unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(20) | YES | | no_name | |
| age | int | YES | | NULL | |
+-------+-----------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)
カラムデータ型変更
MODIFY COLUMN文は、既存のテーブルのカラムのデータ型やその他の属性を変更するためのALTER文の一部です。
ALTER TABLE テーブル名 MODIFY COLUMN カラム名 新データ型;
【usersテーブルの一覧表示】
mysql> SHOW COLUMNS FROM users;
+-------+-----------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------------+------+-----+---------+----------------+
| id | bigint unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(20) | YES | | no_name | |
| age | int | YES | | NULL | |
+-------+-----------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)
【カラムデータ型変更】
mysql> ALTER TABLE users MODIFY COLUMN age BIGINT;
Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0 Warnings: 0
【usersテーブルの一覧表示】
mysql> SHOW COLUMNS FROM users;
+-------+-----------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------------+------+-----+---------+----------------+
| id | bigint unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(20) | YES | | no_name | |
| age | bigint | YES | | NULL | |
+-------+-----------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
カラム名変更
CHANGE COLUMN文は、既存のテーブルのカラムの名前やデータ型を変更するためのALTER文の一部です。
※カラム名とデータ型を指定
ALTER TABLE テーブル名 CHANGE COLUMN 旧カラム名 新カラム名 データ型
【usersテーブルの一覧表示】
+-------+-----------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------------+------+-----+---------+----------------+
| id | bigint unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(20) | YES | | no_name | |
| age | bigint | YES | | NULL | |
+-------+-----------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
【カラム名変更】
mysql> ALTER TABLE users CHANGE COLUMN name full_name VARCHAR(100);
Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> SHOW COLUMNS FROM users;
+-----------+-----------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-----------------+------+-----+---------+----------------+
| id | bigint unsigned | NO | PRI | NULL | auto_increment |
| full_name | varchar(100) | YES | | NULL | |
| age | int | YES | | NULL | |
+-----------+-----------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
制約追加
ADD CONSTRAINT文は、既存のテーブルに制約(Constraint)を追加するためのALTER文の一部です。
※主キー制約 / 外部キー制約 / 一意制約 / NOT NULL制約など
ALTER TABLE テーブル名 ADD CONSTRAINT 制約名 制約条件;
【usersテーブルの一覧表示】
mysql> SHOW COLUMNS FROM users;
+-------+-----------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------------+------+-----+---------+----------------+
| id | bigint unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(20) | YES | | NULL | |
| age | int | YES | | NULL | |
| email | varchar(255) | YES | | NULL | |
+-------+-----------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
【制約追加】
mysql> ALTER TABLE users ADD CONSTRAINT unique_email UNIQUE (email);
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
【usersテーブルの一覧表示】
mysql> SHOW COLUMNS FROM users;
+-------+-----------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------------+------+-----+---------+----------------+
| id | bigint unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(20) | YES | | NULL | |
| age | int | YES | | NULL | |
| email | varchar(255) | YES | UNI | NULL | |
+-------+-----------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
制約削除
DROP CONSTRAINT文は、既存のテーブルから制約を削除するためのALTER文の一部です。
ALTER TABLE テーブル名 DROP CONSTRAINT 制約名;
【usersテーブルの一覧表示】
mysql> SHOW COLUMNS FROM users;
+-------+-----------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------------+------+-----+---------+----------------+
| id | bigint unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(20) | YES | | NULL | |
| age | int | YES | | NULL | |
| email | varchar(255) | YES | UNI | NULL | |
+-------+-----------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
【制約削除】
mysql> ALTER TABLE users DROP CONSTRAINT unique_email;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
【usersテーブルの一覧表示】
mysql> SHOW COLUMNS FROM users;
+-------+-----------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------------+------+-----+---------+----------------+
| id | bigint unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(20) | YES | | NULL | |
| age | int | YES | | NULL | |
| email | varchar(255) | YES | | NULL | |
+-------+-----------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
インデックス追加
ADD INDEX文は、既存のテーブルに新しいインデックスを追加するためのALTER文の一部です。
ALTER TABLE テーブル名 ADD INDEX インデックス名 (カラム名);
【usersテーブルのインデックス確認】
mysql> SHOW INDEX FROM users;
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| users | 0 | PRIMARY | 1 | id | A | 0 | NULL | NULL | | BTREE | | | YES | NULL |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
1 row in set (0.01 sec)
【インデックス追加】
mysql> ALTER TABLE users ADD INDEX user_name(name);
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
【usersテーブルのインデックス確認】
mysql> SHOW INDEX FROM users;
+-------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+-------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| users | 0 | PRIMARY | 1 | id | A | 0 | NULL | NULL | | BTREE | | | YES | NULL |
| users | 1 | user_name | 1 | name | A | 0 | NULL | NULL | YES | BTREE | | | YES | NULL |
+-------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
2 rows in set (0.01 sec)
インデックス削除
DROP INDEX文は、既存のテーブルからインデックスを削除するためのALTER文の一部です。
ALTER TABLE テーブル名 DROP INDEX インデックス名;
【usersテーブルのインデックス確認】
mysql> SHOW INDEX FROM users;
+-------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+-------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| users | 0 | PRIMARY | 1 | id | A | 0 | NULL | NULL | | BTREE | | | YES | NULL |
| users | 1 | user_name | 1 | name | A | 0 | NULL | NULL | YES | BTREE | | | YES | NULL |
+-------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
2 rows in set (0.01 sec)
【インデックス追加】
mysql> ALTER TABLE users DROP INDEX user_name;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
【usersテーブルのインデックス確認】
mysql> SHOW INDEX FROM users;
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| users | 0 | PRIMARY | 1 | id | A | 0 | NULL | NULL | | BTREE | | | YES | NULL |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
1 row in set (0.00 sec)