テーブル属性変更

記事の内容

概要

ALTER文は、既存のテーブルやデータベースの構造を変更するために使用されます。

テーブル名変更

RENAME文は、テーブルの名前を変更するためのALTER文の一部です。

RENAME
記述

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文の一部です。

ADD COLUMN
記述

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文の一部です。

DROP COLUMN
記述

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文の一部です。

MODIFY COLUMN
記述

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文の一部です。
※カラム名とデータ型を指定

CHANGE COLUMN
記述

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制約など

ADD CONSTRAINT
記述

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文の一部です。

DROP CONSTRAINT
記述

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文の一部です。

ADD INDEX
記述

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文の一部です。

DROP INDEX
記述

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)
記事の内容
閉じる