【MySQL】テーブルに対する変更
2025/04/06
ひとつのテーブルだけ名前を変更したい場合は、`ALTER TABLE`または`RENAME TABLE`が使用できます。
```sql
ALTER TABLE old_table_name RENAME new_table_name;
```
```sql
RENAME TABLE old_table_name TO new_table_name;
```
複数のテーブルの名前を変更したい場合は、`RENAME TABLE`が使用できます。
```sql
RENAME TABLE old_table_name1 TO new_table_name1,
old_table_name2 TO new_table_name2;
```
また、`RENAME TABLE`を使用すると、二つのテーブルの名前を入れ替えることができます。
```sql
RENAME TABLE table_name1 TO tmp_table_name,
table_name2 TO table_name1,
tmp_table_name TO table_name2;
```
[公式ドキュメント](https://dev.mysql.com/doc/refman/8.0/ja/rename-table.html)
### カラムをひとつだけ追加したい場合
```sql
ALTER TABLE table_name ADD COLUMN column_name column_definition;
# 例
ALTER TABLE users ADD COLUMN nickname varchar(255) NOT NULL;
```
### 複数のカラムを追加したい場合
```sql
ALTER TABLE table_name ADD COLUMN (column_name1 column_definition1, column_name2 column_definition2, ...);
# 例
ALTER TABLE users ADD COLUMN (first_name varchar(255), last_name varchar(255));
```
[公式ドキュメント](https://dev.mysql.com/doc/refman/8.0/ja/alter-table.html)
追加するカラムの位置を調整したい場合、`FIRST`、`AFTER col_name`が使用できます。デフォルトでは最後に追加されます。使い方としては、以下のようになります。
```sql
# usersテーブルの最初にid_dispカラムを追加する
ALTER TABLE users ADD COLUMN id_disp varchar(255) FIRST;
```
```mermaid
erDiagram
users {
varchar(255) id PK
datetime created_at
datetime updated_at
}
```
↓
```mermaid
erDiagram
users {
varchar(255) id_disp
varchar(255) id PK
datetime created_at
datetime updated_at
}
```
```sql
# usersテーブルのidカラムの後にusernameカラムを追加する
ALTER TABLE users ADD COLUMN username varchar(255) AFTER id;
```
```mermaid
erDiagram
users {
varchar(255) id PK
datetime created_at
datetime updated_at
}
```
↓
```mermaid
erDiagram
users {
varchar(255) id PK
varchar(255) username
datetime created_at
datetime updated_at
}
```
[公式ドキュメント](https://dev.mysql.com/doc/refman/8.0/ja/alter-table.html)
MySQLでカラムを削除するためには以下のSQLが使えます。
```sql
ALTER TABLE table_name DROP COLUMN column_name;
```
または
```sql
ALTER TABLE table_name DROP column_name;
```
テーブルにカラムがひとつしかない場合は削除できません。テーブルごと削除しましょう。また、`DROP column_name`の方は標準SQLに対するMySQLの拡張機能であるため、PostgreSQLのような他のRDBMSでは無効です。
[公式ドキュメント](https://dev.mysql.com/doc/refman/8.0/ja/alter-table.html)
### 名前だけを変更する
```sql
ALTER TABLE table_name RENAME COLUMN old_column_name TO new_column_name;
# 例
ALTER TABLE users RENAME COLUMN name TO name_enc;
```
### 定義だけを変更する
```sql
ALTER TABLE table_name MODIFY column_name column_definition;
# 例
ALTER TABLE users MODIFY name varchar(20) NOT NULL;
```
### 名前も定義も変更する
```sql
ALTER TABLE table_name CHANGE COLUMN old_column_name new_column_name column_definition;
# 例
ALTER TABLE users CHANGE COLUMN name name_enc varchar(20) NOT NULL;
```
`CHANGE COLUMN`は`RENAME`と`MODIFY`の機能を含んでいますが、変更されない要素があった場合でも省略できないため冗長になることがあります。
[公式ドキュメント](https://dev.mysql.com/doc/refman/8.0/ja/alter-table.html)