IT・個人事業

DBeaverでカラムを追加・変更・削除する方法(ALTER TABLE)|MySQL操作⑥

公開:

※ 本記事にはアフィリエイト広告(Amazonアソシエイト・楽天アフィリエイト等)が含まれています。

今回扱うのは、すでにあるテーブルの「列」をあとから作り替える操作です。全体像はこの図のとおりです。

ALTER TABLE でできるカラム操作 my_first_db.table t_key t_name t_value created_at memo CHANGE 名前を変更 MODIFY 型を変更 DROP 列を削除 ADD 列を追加

DBeaverでMySQLのカラムを追加・変更・削除しよう

前回の DBeaverでテーブルからデータを取得する方法(SELECT文)|MySQL操作⑤ まで、データベースとテーブルを作り、レコードを入れて取り出すところまで進めてきました。

実際に使い始めると、「あとから列を足したい」「文字数が足りなかった」「列名を付け間違えた」ということが必ず起きます。私も、最初に varchar(20) で作った列に長い値が入らず、作り直そうか迷ったことがあります。テーブルを消して作り直す必要はなく、ALTER TABLE で中身を残したまま列だけ直せます。

カラムの基本的な追加と削除は DBeaverでテーブルを作成・削除・カラム追加する方法|MySQL操作③ で一度触れました。今回はその続きとして、位置を指定した追加、型と名前の変更、そして事故を防ぐ確認手順までまとめます。

SQLの実行方法はこれまでと同じです。DBeaverのSQLエディタに入力し、実行したい文にカーソルを合わせて Ctrl + Enter です。

作業前に今のカラム構成を確認する

変更する前に、いまテーブルがどうなっているかを必ず見ておきます。

desc my_first_db.table;

desc は describe の省略形で、カラム名・型・NULLを許すか・初期値などが一覧で返ってきます。show columns from my_first_db.table; でも同じ結果です。

変更したあとにも同じ文を実行して、意図どおりになったかを確かめます。この「前後で desc」を習慣にするだけで、ミスにすぐ気づけるようになります。

ALTER TABLE は実行した瞬間に反映され、元に戻すボタンはありません。大事なデータが入っているテーブルなら、先にバックアップを取ってください。mysqldump でのバックアップは WindowsでMySQLのバックアップ(dump)に詰まったので解決策をまとめた に書いています。

カラムを追加する(ADD COLUMN)

基本の追加

alter table my_first_db.table
 add column memo varchar(255) default null comment 'メモ';

add column のあとに「カラム名・データ型・制約」の順で書きます。位置を指定しないと、テーブルのいちばん最後に追加されます。

位置を指定して追加する(AFTER / FIRST)

列の並び順を揃えたいときは after か first を付けます。

alter table my_first_db.table
 add column t_kana varchar(50) default null after t_name;

これで t_name の直後に t_kana が入ります。先頭に入れたいときは after 〇〇 の代わりに first と書きます。

列の順番はSQLの動作には影響しませんが、DBeaverで中身を眺めるときの見やすさが全然違います。関連する列は隣に置いておくのがおすすめです。

複数のカラムをまとめて追加する

alter table my_first_db.table
 add column price int unsigned not null default 0,
 add column stock int unsigned not null default 0;

add column をカンマでつなぐと、1回の実行で複数列を追加できます。

すでにレコードが入っているテーブルに not null の列を追加するときは、default を一緒に指定しておくと安心です。既存の行には、その初期値が入ります。

カラムの型や制約を変更する(MODIFY COLUMN)

名前はそのままで、型・長さ・NULL許可などを変えたいときは modify を使います。

alter table my_first_db.table
 modify column t_name varchar(100) not null;

t_name を varchar(20) から varchar(100) に広げる例です。

ここで注意が1つあります。MODIFY は列の定義を丸ごと書き直す命令です。もともと付けていた not null や default、comment を書き忘れると、それらは消えてしまいます。変更前に desc で今の定義を確認し、残したいものはすべて書き直してください。

型を小さくする変更(varchar(100) → varchar(10) など)は、入っているデータが収まらないとエラーになるか、設定によっては切り詰められます。広げる方向の変更はほぼ安全ですが、狭める方向は慎重に行いましょう。

カラム名を変更する(CHANGE / RENAME COLUMN)

CHANGE COLUMN で名前と型を同時に変える

alter table my_first_db.table
 change column t_value t_note varchar(100) default null comment '備考';

change column 旧カラム名 新カラム名 定義 の順に書きます。名前だけ変えたい場合でも、定義を省略できない点に注意してください。MODIFY と同じく、書かなかった制約は消えます。

RENAME COLUMN で名前だけ変える(MySQL 8.0以降)

alter table my_first_db.table
 rename column t_note to t_value;

MySQL 8.0以降なら、rename column で定義を書かずに名前だけ変えられます。うっかり制約を消す心配がないので、名前だけ変えるならこちらが確実です。

MySQL 5.7ではこの構文がエラーになるので、change column を使います。MAMPのバージョンによって中のMySQLも違うため、使っているバージョンは次の文で確認できます。

select version();

カラムを削除する(DROP COLUMN)

alter table my_first_db.table
 drop column t_kana;

複数まとめて消すときは、追加と同じくカンマでつなぎます。

alter table my_first_db.table
 drop column price,
 drop column stock;

列を消すと、その列に入っていたデータも全行ぶん消えます。実行前に select で中身を見て、本当に不要か確かめてから消してください。SELECTの書き方は MySQL操作⑤ で紹介しています。

SQLを書かずにDBeaverの画面で変更する方法

DBeaverでは、SQLを書かずに画面からカラムを編集することもできます。

  1. 左のナビゲーターで対象のテーブルをダブルクリックして開く
  2. 「プロパティ」タブの中にある「カラム」の一覧を表示する
  3. 一覧の上で右クリックし、新しいカラムの作成や既存カラムの編集・削除を選ぶ
  4. 編集後に保存すると、実行されるSQLの確認画面が出るので、内容を見てから実行する

私がいいなと思っているのは4番目です。画面で操作しても、裏で実行される ALTER TABLE 文を実行前に見せてくれます。GUIで直しつつ、SQLの書き方も覚えられます。

ただ、どのSQLが流れたかを後から振り返りやすいのはSQLエディタのほうです。慣れてきたら、SQLで書いて実行する方法をメインにするのがおすすめです。

まとめ:ALTER TABLE でよく使う書き方

やりたいこと 書き方
最後に列を追加 add column 名前 型
位置を指定して追加 add column 名前 型 after 既存列
型・制約を変える modify column 名前 新しい定義
名前と定義を変える change column 旧名 新名 定義
名前だけ変える(8.0以降) rename column 旧名 to 新名
列を削除 drop column 名前

最後にもう一度。変更の前後に desc で確認すること、大事なテーブルは先にバックアップを取ること。この2つを守れば、ALTER TABLE はこわくありません。

MySQL操作シリーズの記事一覧

ぜひ参考にしてください!また!