SQLのカラム名変更についてまとめています。
目次
SQLのカラム名変更は、alter table。カラム名やNULL許可、デフォルト値なども変更可能

SQLでカラム名を変更するにはalter tableを使用します。alter table カラム名 renameでカラム名のリネーム、alter table カラム名 modifyでカラム属性の変更が可能です。alter table カラム名 changeでリネームと属性変更が同時におこなえます。
※以下、MySQLのサンプルデータベースEmployeesを使用しています。
SQLのカラム名変更はalter table ~ rename
実際にカラム名の変更をおこなってみましょう。
- employeesテーブルと同じ構造でemployees_copyテーブルを作成
- カラム内容を確認
- alter table ~ renameでlast_nameカラムをlast_name1カラムに名前変更
- カラム内容を確認して、リネームされたことを確認
mysql> create table employees_copy like employees;
Query OK, 0 rows affected (0.05 sec)
mysql> show columns from employees_copy;
+------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
| emp_no | int | NO | PRI | NULL | |
| birth_date | date | NO | | NULL | |
| first_name | varchar(14) | YES | | NULL | |
| last_name | varchar(16) | NO | | NULL | |
| gender | enum('M','F') | NO | | NULL | |
| hire_date | date | NO | | NULL | |
+------------+---------------+------+-----+---------+-------+
6 rows in set (0.04 sec)
mysql> alter table employees_copy rename column last_name to last_name1;
Query OK, 0 rows affected (0.02 sec)
mysql> show columns from employees_copy;
+------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
| emp_no | int | NO | PRI | NULL | |
| birth_date | date | NO | | NULL | |
| first_name | varchar(14) | YES | | NULL | |
| last_name1 | varchar(16) | NO | | NULL | |
| gender | enum('M','F') | NO | | NULL | |
| hire_date | date | NO | | NULL | |
+------------+---------------+------+-----+---------+-------+
6 rows in set (0.00 sec)
カラム名変更の機能は、SQL標準ではないため一部のデータベースエンジンによってコマンドが異なります。Oracle、postgreSQLではMySQLと同様alter table ~ renameでカラム名変更が可能です。
例えば、SQL Serverでは、ストアドプロシジャsp_renameを使ってカラム名変更をおこないます。
EXEC sp_rename 'Sales.SalesTerritory.TerritoryID', 'TerrID', 'COLUMN';
関連)列名の変更 (データベース エンジン) – SQL Server | Microsoft Docs
カラム名変更とカラム属性変更を同時におこなうには、alter table ~ change
カラム属性の変更は、alter table ~ modifyで指定したカラム属性の変更が可能です。以下は、employees_copyテーブルのlast_name1カラムの属性を、データ型varchar(20)、デフォルト値NULL、NULL許可=NOに指定する例です。
mysql> alter table employees_copy modify last_name1 varchar(20) NULL not NULL;
Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> show columns from employees_copy;
+------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
| emp_no | int | NO | PRI | NULL | |
| birth_date | date | NO | | NULL | |
| first_name | varchar(14) | YES | | NULL | |
| last_name1 | varchar(20) | NO | | NULL | |
| gender | enum('M','F') | NO | | NULL | |
| hire_date | date | NO | | NULL | |
+------------+---------------+------+-----+---------+-------+
6 rows in set (0.00 sec)
alter table ~ changeは、カラム名のリネームとカラム属性の変更を同時に行います。
以下は、employees_copyテーブルのlast_name1カラムをlast_nameにリネームし、データ型をvarchar(16)、デフォルト値をNULL、NULL許可=NOに変更するサンプルです。
mysql> alter table employees_copy change last_name1 last_name varchar(16) NULL not NULL;
Query OK, 0 rows affected (0.08 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> show columns from employees_copy;
+------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
| emp_no | int | NO | PRI | NULL | |
| birth_date | date | NO | | NULL | |
| first_name | varchar(14) | YES | | NULL | |
| last_name | varchar(16) | NO | | NULL | |
| gender | enum('M','F') | NO | | NULL | |
| hire_date | date | NO | | NULL | |
+------------+---------------+------+-----+---------+-------+
6 rows in set (0.00 sec)
デフォルト値、NULL許可の部分は省略可能です。省略した場合は、デフォルト値=NULL、NULL許可=YESとなります。
まとめ


- SQLのカラム名変更はalter table ~ rename
- alter table ~ changeで、カラム名変更とカラム属性の変更を同時におこなうことができる
- SQLのカラム名変更はSQL標準ではないため、DBMSによりコマンドが異なる場合がある