Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

MySQLのテーブルカラム追加の方法について、サンプルSQLを紹介しながらまとめています。

以下、データベースとして、MySQLのサンプルデータベースEmployeesを使っています。SQL実行結果の表示にはphpMyAdminを使用しています。

MySQLのカラム追加はALTER TABLE

MySQLのカラム追加(ALTER TABLE ADD)の構文は以下の通りです。

alter table 
	テーブル名 
add 
	カラム名
	データ型
	NULL許可
	DEFAULT デフォルト値
	COMMENT コメント
	キー指定
first/after カラム位置の指定

employeesテーブルのコピーを作って、カラム追加を試してみましょう。

create table employees_copy
like employees

上記SQLは、employees(社員)テーブルの構造のみコピーして、employees_copyテーブルを作成します。

employees_copyテーブルに、dept_no(部署コード、char(4))と、dept_name(部署名、varrchar(40))のカラムを追加してみます。それぞれNULLは禁止(NOT NULL)とします。

まずは、dept_noを追加します。

alter table 
	employees_copy 
add 
	dept_no char(4)
	NOT NULL

続いて、dept_nameを追加します。

alter table 
	employees_copy 
add 
	dept_name varchar(40)
	NOT NULL

show columnsを実行して、employees_copyのカラム構成を確認してみましょう。

show columns from employees_copy

結果はこうなります。

テーブルの末尾に、dept_noとdept_nameが追加されました。

追加時のカラム位置の指定方法

AFTERまたはFIRSTを指定することで、カラムを指定の位置に追加できます。

dept_noカラム追加のSQLを以下のようにすると、employees_copyテーブルにemp_noカラムの次にdept_noを追加します。

alter table 
	employees_copy 
add 
	dept_no char(4)
	NOT NULL
after	emp_no

結果はこうなります。

firstを指定すると、先頭にカラムが追加されます。

alter table 
	employees_copy 
add 
	dept_no char(4)
	NOT NULL
first

実行結果はこうなります。

カラム追加のサンプルコード集

複数のカラムを追加するには

「,」(カンマ)で区切って実行すると、複数のカラムを一度に追加できます。

alter table 
	employees_copy 
add 	dept_no char(4) NOT NULL after emp_no, 
add 	dept_name varchar(40) NOT NULL

カラムを削除する「drop」を組み合わせることも可能です。

alter table 
	employees_copy 
drop column dept_no,
drop column dept_name,
add 	dept_no char(4) NOT NULL after emp_no, 
add 	dept_name varchar(40) NOT NULL

同様に、change、modifyも1クエリにまとめて実行が可能です。

カラム追加時にデフォルト値を設定するには

alter table 
	employees_copy 
add 
	dept_no char(4)
	NOT NULL
	DEFAULT 0
after	emp_no

カラム追加時にカラムのコメントを追加するには

以下のSQLで、追加したカラムにコメントを設定できます。

alter table 
	employees_copy 
add 
	dept_no char(4)
	NOT NULL
	DEFAULT 0
	COMMENT '部署番号'
after	emp_no

【関連記事】
SQLのコメントの使い方 主要DBMSだけでもこれだけ違う 独自拡張機能も

追加済みカラムの位置などを変更するには

カラムの位置に限らず、追加済みカラムの設定を変更するには、alter table changeを使用します。

変更箇所だけでなく、全てのカラム構造の情報を指定する必要があります。

alter table 
	employees_copy 
change dept_no
	dept_no char(4)
	NOT NULL
	DEFAULT 0
	COMMENT '部署番号'
after	emp_no

alter table modifyは、フィールド名とデータ型のみ変更することができます。alter table changeとは少々書式が異なります。

alter table 
	employees_copy 
modify dept_no
	char(5)

データありテーブルに、not NULL制約のカラムを追加すると、型ごとに異なる初期値が入る

データが存在するテーブルに、not NULL制約つきのカラムを追加すると値はどうなるのか試してみます。

まずは、employeesテーブルの構造とデータをコピーした、employees_copy2を用意します。

create table employees_copy2
like employees;
insert into employees_copy2
select * from employees;

employees_copy2テーブルの中身はこうなってます。

not NULL制約のついたcol_char4(char型)、col_int(int型)、col_date(date型)のカラムを追加します。

alter table 	employees_copy2 
add col_char4 char(4) not NULL, 
add col_int int not NULL, 
add col_date date not NULL;

employees_copy2の中身はこうなります。

char(4)のカラムには、”(空文字)、int型のカラムには0、date型のカラムには「0000-00-00」が初期値として入りました。

ALTER TABLE ADDのカラム追加が遅くなるケース

500万行のテーブルに対して、カラムを1つ追加したら1時間以上の待ちが発生した、というケースがあるようです。

参考)大きめのテーブルにカラムやインデックスを追加する際の注意 – LukeSilvia’s diary

ただし、MySQLのバージョンは4.1と古く、MyISAMテーブルを使っていて、キーキャッシュのサイズ(key_buffer_size)が小さかったのが原因のようです。

最近では、他に同様のトラブルは見られない点から、あまり気にする必要はないのかも知れませんね。

まとめ

ポテパンダの一言メモ
  • MySQLのテーブルカラム追加は、alter table addで可能
  • テーブル追加時に、カラム名、データ型、NULL許可、デフォルト値、コメントを指定可能
  • 複数カラムを一括指定できる
  • 追加済みカラムの変更は、alter table change、modify、renameでおこなう
  • 古いMySQLでMyISAMテーブルを使っている場合、カラム追加で1時間以上の待ちが発生するケースあり

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。