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によりコマンドが異なる場合がある